iobroker.autodarts 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,7 +26,9 @@ Connects to your local Autodarts Board Manager (via IP and port, e.g. `192.168.x
26
26
  - **`visit.score`**: Total score of the last complete visit (3 darts)
27
27
  - **`throw.current`**: Numeric score of the last thrown dart
28
28
  - **`throw.isTriple`**: Boolean flag for triple hits within configurable segment range (default: 1–20)
29
+ - **`throw.isDouble`**: Boolean flag for double hits only (all segments)
29
30
  - **`throw.isBullseye`**: Boolean flag for bullseye hits only
31
+ - **`throw.isMiss`**: Boolean flag that is true when the dart does not hit any valid scoring segment (pure miss, no score)
30
32
 
31
33
  ### Board Status
32
34
  - **`status.trafficLightColor`**: HEX color of current board status
@@ -46,7 +48,7 @@ Connects to your local Autodarts Board Manager (via IP and port, e.g. `192.168.x
46
48
 
47
49
  ### Runtime Configuration
48
50
  - **`config.tripleMinScore/tripleMaxScore`**: Adjust triple trigger thresholds during runtime
49
- - **`config.triggerResetSec`**: Auto-reset time for triple/bullseye flags
51
+ - **`config.triggerResetSec`**: Auto-reset time for triple/double/bullseye/miss flags
50
52
 
51
53
  ## What this adapter does NOT do
52
54
 
@@ -61,17 +63,42 @@ All data stays local on your ioBroker system.
61
63
 
62
64
  ![Configuration Screenshot](docs/config-screenshot.png)
63
65
 
64
- In the adapter settings, enter:
66
+ The adapter settings are split into two tabs: **OPTIONS** and **MAPPINGS**.
65
67
 
66
- - **Board Manager IP**: IP address of your Autodarts Board Manager (e.g. `192.168.178.50`)
67
- - **Port**: Usually `3180` (default for Board Manager)
68
- - **Polling interval (s)**: How often to check for new throws (default: 1s)
68
+ ### Tab: OPTIONS
69
69
 
70
- ### Optional: Hardware Control Mapping
71
- - **Light Target ID**: ioBroker state ID to sync with `system.hardware.light` (e.g., `0_userdata.0.LIGHT`)
72
- - **Power Target ID**: ioBroker state ID to sync with `system.hardware.power` (e.g., `0_userdata.0.POWER`)
70
+ In **OPTIONS** you configure how the adapter connects to your local Autodarts Board Manager and how often it polls data:
73
71
 
74
- When configured, changes to either the adapter states or external states are synchronized bidirectionally.
72
+ - **Board Manager IP**
73
+ IP address of your Autodarts Board Manager (e.g. `192.168.178.50` or `127.0.0.1`).
74
+
75
+ - **Port**
76
+ TCP port of the Board Manager (usually `3180`).
77
+
78
+ - **Triple trigger range**
79
+ Two dropdowns to define the **minimum** and **maximum** field number (1–20) that should be considered for `throw.isTriple`.
80
+ Triples outside this range will not trigger the flag.
81
+
82
+ - **Trigger reset (s)**
83
+ Time in seconds after which triple, double, bullseye and miss flags are reset.
84
+ `0` means no automatic reset.
85
+
86
+ - **Polling interval (s)**
87
+ How often the adapter polls the Board Manager for new data (e.g. `0.5`, `1`, `2` seconds).
88
+
89
+ ### Tab: MAPPINGS
90
+
91
+ In **MAPPINGS** you can link existing ioBroker states to the hardware related adapter states:
92
+
93
+ - **Light Target ID**
94
+ ioBroker state ID that is synchronized with `system.hardware.light`
95
+ (e.g. `0_userdata.0.Autodarts.LIGHT` or a state of a smart light/LED ring).
96
+
97
+ - **Power Target ID**
98
+ ioBroker state ID that is synchronized with `system.hardware.power`
99
+ (e.g. `0_userdata.0.Autodarts.POWER` or a state of a smart plug).
100
+
101
+ When configured, changes on either side (adapter state or external state) are synchronized bidirectionally so you can both control the board from ioBroker and react on board events.
75
102
 
76
103
 
77
104
  ## Privacy & Data Handling
@@ -85,6 +112,16 @@ When configured, changes to either the adapter states or external states are syn
85
112
  <!--
86
113
  ### **WORK IN PROGRESS**
87
114
  -->
115
+ ### 0.6.1 (2025-12-29)
116
+ - (skvarel) New: Settings page reworked to use two tabs (`OPTIONS` and `MAPPINGS`) for better clarity.
117
+ - (skvarel) New: Mapping of ioBroker objects for board light and board power in the **MAPPINGS** tab.
118
+ - (skvarel) Improved: Layout of the configuration page (field widths, spacing, texts) for a more symmetric and clean UI.
119
+ - (skvarel) Improved: Updated option descriptions in the admin UI.
120
+
121
+ ### 0.6.0 (2025-12-28)
122
+ - (skvarel) Added: New throw.isMiss state to detect and trigger automations on missed darts (including auto-reset via triggerResetSec).
123
+ - (skvarel) Added: New throw.isDouble state to detect and trigger automations on double segments (including auto-reset via triggerResetSec).
124
+
88
125
  ### 0.5.1 (2025-12-28)
89
126
  - (skvarel) Fixed: Hardware light/power mapping now respects configured target IDs and works on all systems.
90
127
 
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Konfiguration des Autodarts-Adapters.",
7
7
  "light_target": "LED-Ring Datenpunkt",
8
8
  "light_target_help": "Datenpunkt des LED-Ring zur Steuerung innerhalb des Autodarts-Adapters. Lasse das Feld leer, um die Lichtsteuerung zu deaktivieren.",
9
+ "mappings": "Zuweisungen",
10
+ "options": "Optionen",
11
+ "options_connection": "Verbindungsoptionen",
12
+ "options_logic": "Logikoptionen",
9
13
  "polling": "Abfrageintervall (s)",
10
14
  "polling_help": "Abfrageintervall in Sekunden zum Abrufen von Daten vom Autodarts Boardmanager.",
11
15
  "power_target": "Power-Datenpunkt",
12
16
  "power_target_help": "Datenpunkt der Server- oder Bildschirm-Steckdose zur Steuerung innerhalb des Autodarts-Adapters. Lasse das Feld leer, um die Leistungssteuerung zu deaktivieren.",
13
17
  "reset": "Trigger-Reset (s)",
14
- "reset_help": "Setzt den Triple- und Bullseye-Trigger nach x Sekunden zurück (0 = kein Reset).",
18
+ "reset_help": "Setzt den Triple-, Doppel-, Bullseye und Miss-Trigger nach x Sekunden zurück (0 = kein Reset).",
15
19
  "triple_flag": "Minimales Feld für den Triple-Trigger",
16
20
  "triple_flag2": "Maximales Feld für den Triple-Trigger",
17
21
  "triple_flag2_help": "Feld „Maximale Punktzahl“ für den Triple-Trigger. Darts mit einer Punktzahl über diesem Wert lösen den Triple-Trigger-Datenpunkt nicht aus.",
@@ -11,9 +11,13 @@
11
11
  "triple_flag2_help": "Maximum score field for the triple trigger. Darts with a score above this value will not trigger the Triple-Trigger datapoint.",
12
12
  "triple_flag_help": "Minimum score field for the triple trigger. Darts with a score below this value will not trigger the Triple-Trigger datapoint.",
13
13
  "reset": "Trigger-Reset (s)",
14
- "reset_help": "Reset the triple and bullseye trigger after x seconds (0 = no reset).",
14
+ "reset_help": "Reset the triple, double, bullseye and miss trigger after x seconds (0 = no reset).",
15
15
  "light_target": "Light Target ID",
16
16
  "light_target_help": "ID of the light target to control lights via Autodarts (e.g., 'light.living_room'). Leave empty to disable light control.",
17
17
  "power_target": "Power Target ID",
18
- "power_target_help": "ID of the power target to control power via Autodarts (e.g., 'switch.darts_socket'). Leave empty to disable power control."
18
+ "power_target_help": "ID of the power target to control power via Autodarts (e.g., 'switch.darts_socket'). Leave empty to disable power control.",
19
+ "options": "Options",
20
+ "mappings":"Mappings",
21
+ "options_connection": "Connection Options",
22
+ "options_logic": "Logic Options"
19
23
  }
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Configuración del adaptador Autodarts.",
7
7
  "light_target": "ID de objetivo ligero",
8
8
  "light_target_help": "ID del objetivo de luz para controlar las luces a través de Autodarts (por ejemplo, 'light.living_room'). Déjelo vacío para desactivar el control de luces.",
9
+ "mappings": "Mapeos",
10
+ "options": "Opciones",
11
+ "options_connection": "Opciones de conexión",
12
+ "options_logic": "Opciones lógicas",
9
13
  "polling": "Intervalo(s) de sondeo",
10
14
  "polling_help": "Intervalo de sondeo en segundos para recuperar datos del Autodarts Boardmanager.",
11
15
  "power_target": "ID de objetivo de potencia",
12
16
  "power_target_help": "ID del objetivo de energía para controlar la energía a través de Autodarts (por ejemplo, 'switch.darts_socket'). Déjelo vacío para desactivar el control de energía.",
13
17
  "reset": "Restablecimiento de disparador (s)",
14
- "reset_help": "Restablezca el disparador triple y de diana después de x segundos (0 = sin reinicio).",
18
+ "reset_help": "Restablezca el disparador triple, doble, diana y fallido después de x segundos (0 = sin reinicio).",
15
19
  "triple_flag": "Campo mínimo para el triple disparador",
16
20
  "triple_flag2": "Campo máximo para el triple disparador",
17
21
  "triple_flag2_help": "Campo de puntuación máxima para el triple disparador. Los dardos con una puntuación superior a este valor no activarán el punto de datos Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Configuration de l'adaptateur Autodarts.",
7
7
  "light_target": "ID de cible lumineuse",
8
8
  "light_target_help": "ID de la cible lumineuse pour contrôler les lumières via Autodarts (par exemple, « light.living_room »). Laissez vide pour désactiver le contrôle de la lumière.",
9
+ "mappings": "Mappages",
10
+ "options": "Possibilités",
11
+ "options_connection": "Options de connexion",
12
+ "options_logic": "Options logiques",
9
13
  "polling": "Intervalle(s) d'interrogation",
10
14
  "polling_help": "Intervalle d'interrogation en secondes pour récupérer les données de l'Autodarts Boardmanager.",
11
15
  "power_target": "ID de cible de puissance",
12
16
  "power_target_help": "ID de la cible d'alimentation pour contrôler l'alimentation via Autodarts (par exemple, « switch.darts_socket »). Laissez vide pour désactiver le contrôle de l’alimentation.",
13
17
  "reset": "Déclencheur-Réinitialisation(s)",
14
- "reset_help": "Réinitialisez le déclencheur triple et bullseye après x secondes (0 = pas de réinitialisation).",
18
+ "reset_help": "Réinitialisez les déclencheurs triple, double, bullseye et miss après x secondes (0 = pas de réinitialisation).",
15
19
  "triple_flag": "Champ minimum pour le triple déclencheur",
16
20
  "triple_flag2": "Champ maximum pour le triple déclencheur",
17
21
  "triple_flag2_help": "Champ de score maximum pour le triple déclencheur. Les fléchettes avec un score supérieur à cette valeur ne déclencheront pas le point de données Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Configurazione dell'adattatore Autodarts.",
7
7
  "light_target": "ID del bersaglio luminoso",
8
8
  "light_target_help": "ID del target luminoso per controllare le luci tramite Autodarts (ad esempio, \"light.living_room\"). Lasciare vuoto per disabilitare il controllo della luce.",
9
+ "mappings": "Mappature",
10
+ "options": "Opzioni",
11
+ "options_connection": "Opzioni di connessione",
12
+ "options_logic": "Opzioni logiche",
9
13
  "polling": "Intervallo di polling (s)",
10
14
  "polling_help": "Intervallo di polling in secondi per recuperare i dati da Autodarts Boardmanager.",
11
15
  "power_target": "ID del target di potenza",
12
16
  "power_target_help": "ID del target di potenza per controllare l'energia tramite Autodarts (ad esempio, \"switch.darts_socket\"). Lasciare vuoto per disabilitare il controllo dell'alimentazione.",
13
17
  "reset": "Trigger-Reset(s)",
14
- "reset_help": "Ripristina il grilletto triplo e bullseye dopo x secondi (0 = nessun ripristino).",
18
+ "reset_help": "Resetta il trigger triplo, doppio, bullseye e mancato dopo x secondi (0 = nessun reset).",
15
19
  "triple_flag": "Campo minimo per il triplo trigger",
16
20
  "triple_flag2": "Campo massimo per il triplo trigger",
17
21
  "triple_flag2_help": "Campo del punteggio massimo per il triplo trigger. Le freccette con un punteggio superiore a questo valore non attiveranno il punto dati Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Autodarts-adapterconfiguratie.",
7
7
  "light_target": "Lichtdoel-ID",
8
8
  "light_target_help": "ID van het lichtdoel om lampen te bedienen via Autodarts (bijvoorbeeld 'light.living_room'). Laat dit leeg om de lichtregeling uit te schakelen.",
9
+ "mappings": "Toewijzingen",
10
+ "options": "Opties",
11
+ "options_connection": "Verbindingsopties",
12
+ "options_logic": "Logische opties",
9
13
  "polling": "Polling-interval (s)",
10
14
  "polling_help": "Polling-interval in seconden om gegevens uit de Autodarts Boardmanager op te halen.",
11
15
  "power_target": "Power Target-ID",
12
16
  "power_target_help": "ID van het powertarget om de power te regelen via Autodarts (bijvoorbeeld 'switch.darts_socket'). Laat dit leeg om de stroomregeling uit te schakelen.",
13
17
  "reset": "Trigger-reset (s)",
14
- "reset_help": "Reset de drievoudige en bullseye-trigger na x seconden (0 = geen reset).",
18
+ "reset_help": "Reset de drievoudige, dubbele, bullseye- en miss-trigger na x seconden (0 = geen reset).",
15
19
  "triple_flag": "Minimumveld voor de drievoudige trigger",
16
20
  "triple_flag2": "Maximaal veld voor de drievoudige trigger",
17
21
  "triple_flag2_help": "Maximaal scoreveld voor de drievoudige trigger. Darten met een score boven deze waarde activeren het Triple-Trigger-datapunt niet.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Konfiguracja adaptera Autodarts.",
7
7
  "light_target": "Identyfikator lekkiego celu",
8
8
  "light_target_help": "Identyfikator celu świetlnego do sterowania światłami za pomocą Autodarts (np. „light.living_room”). Pozostaw puste, aby wyłączyć kontrolę oświetlenia.",
9
+ "mappings": "Mapowania",
10
+ "options": "Opcje",
11
+ "options_connection": "Opcje połączenia",
12
+ "options_logic": "Opcje logiczne",
9
13
  "polling": "Interwał odpytywania (s)",
10
14
  "polling_help": "Interwał odpytywania w sekundach w celu pobrania danych z menedżera Autodarts Boardmanager.",
11
15
  "power_target": "Identyfikator celu mocy",
12
16
  "power_target_help": "Identyfikator celu mocy do kontrolowania mocy za pomocą Autodarts (np. „switch.darts_socket”). Pozostaw puste, aby wyłączyć kontrolę mocy.",
13
17
  "reset": "Reset wyzwalacza (s)",
14
- "reset_help": "Zresetuj wyzwalacz potrójny i tarczy po x sekundach (0 = brak resetu).",
18
+ "reset_help": "Zresetuj wyzwalacz potrójny, podwójny, strzał w dziesiątkę i spudłowanie po x sekundach (0 = brak resetu).",
15
19
  "triple_flag": "Minimalne pole dla potrójnego wyzwalacza",
16
20
  "triple_flag2": "Maksymalne pole dla potrójnego wyzwalacza",
17
21
  "triple_flag2_help": "Pole maksymalnego wyniku dla potrójnego wyzwalacza. Rzutki z wynikiem powyżej tej wartości nie uruchomią punktu danych Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Configuração do adaptador Autodarts.",
7
7
  "light_target": "ID do alvo claro",
8
8
  "light_target_help": "ID do alvo de luz para controlar luzes via Autodarts (por exemplo, 'light.living_room'). Deixe em branco para desativar o controle de luz.",
9
+ "mappings": "Mapeamentos",
10
+ "options": "Opções",
11
+ "options_connection": "Opções de conexão",
12
+ "options_logic": "Opções lógicas",
9
13
  "polling": "Intervalo(s) de pesquisa",
10
14
  "polling_help": "Intervalo de pesquisa em segundos para recuperar dados do Autodarts Boardmanager.",
11
15
  "power_target": "ID do alvo avançado",
12
16
  "power_target_help": "ID do alvo de potência para controlar a potência por meio de Autodarts (por exemplo, 'switch.darts_socket'). Deixe em branco para desativar o controle de energia.",
13
17
  "reset": "Redefinição(ões) de gatilho",
14
- "reset_help": "Redefina o gatilho triplo e alvo após x segundos (0 = sem reinicialização).",
18
+ "reset_help": "Redefina o disparo triplo, duplo, alvo e erro após x segundos (0 = sem reinicialização).",
15
19
  "triple_flag": "Campo mínimo para o disparo triplo",
16
20
  "triple_flag2": "Campo máximo para o disparo triplo",
17
21
  "triple_flag2_help": "Campo de pontuação máxima para o disparo triplo. Dardos com pontuação acima deste valor não acionarão o ponto de dados Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Конфигурация адаптера Autodarts.",
7
7
  "light_target": "Идентификатор легкой цели",
8
8
  "light_target_help": "Идентификатор световой цели для управления освещением через Autodarts (например, «light.living_room»). Оставьте пустым, чтобы отключить управление освещением.",
9
+ "mappings": "Сопоставления",
10
+ "options": "Параметры",
11
+ "options_connection": "Варианты подключения",
12
+ "options_logic": "Логические параметры",
9
13
  "polling": "Интервал опроса (с)",
10
14
  "polling_help": "Интервал опроса в секундах для получения данных из Autodarts Boardmanager.",
11
15
  "power_target": "Идентификатор цели по мощности",
12
16
  "power_target_help": "Идентификатор цели мощности для управления мощностью через Autodarts (например, «switch.darts_socket»). Оставьте пустым, чтобы отключить управление питанием.",
13
17
  "reset": "Триггер-Сброс (ы)",
14
- "reset_help": "Сбросьте триггер и триггер «яблочко» через x секунд (0 = сброса нет).",
18
+ "reset_help": "Сбросьте триггер тройного, двойного, яблочко и промаха через x секунд (0 = сброса нет).",
15
19
  "triple_flag": "Минимальное поле для тройного триггера",
16
20
  "triple_flag2": "Максимальное поле для тройного триггера",
17
21
  "triple_flag2_help": "Поле максимального результата для тройного триггера. Дартс с результатом выше этого значения не будет активировать точку данных тройного триггера.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Конфігурація адаптера Autodarts.",
7
7
  "light_target": "Ідентифікатор легкої цілі",
8
8
  "light_target_help": "Ідентифікатор цільового освітлення для керування освітленням через Autodarts (наприклад, \"light.living_room\"). Залиште пустим, щоб вимкнути керування світлом.",
9
+ "mappings": "Відображення",
10
+ "options": "Опції",
11
+ "options_connection": "Параметри підключення",
12
+ "options_logic": "Параметри логіки",
9
13
  "polling": "Інтервал опитування (с)",
10
14
  "polling_help": "Інтервал опитування в секундах для отримання даних із Autodarts Boardmanager.",
11
15
  "power_target": "Power Target ID",
12
16
  "power_target_help": "Ідентифікатор цільової потужності для керування живленням через Autodarts (наприклад, 'switch.darts_socket'). Залиште пустим, щоб вимкнути керування живленням.",
13
17
  "reset": "Тригер-Скидання (s)",
14
- "reset_help": "Скинути потрійний тригер і тригер «яблочко» через x секунд (0 = без скидання).",
18
+ "reset_help": "Скинути потрійний, подвійний, яблучний і промах через x секунд (0 = без скидання).",
15
19
  "triple_flag": "Мінімальне поле для потрійного тригера",
16
20
  "triple_flag2": "Максимальне поле для потрійного тригера",
17
21
  "triple_flag2_help": "Поле максимального балу для потрійного тригера. Дартс із результатом вище цього значення не активує точку даних Triple-Trigger.",
@@ -6,12 +6,16 @@
6
6
  "intro_txt": "Autodarts 适配器配置。",
7
7
  "light_target": "光目标ID",
8
8
  "light_target_help": "通过 Autodarts 控制灯光的灯光目标的 ID(例如“light.living_room”)。留空以禁用灯光控制。",
9
+ "mappings": "映射",
10
+ "options": "选项",
11
+ "options_connection": "连接选项",
12
+ "options_logic": "逻辑选项",
9
13
  "polling": "轮询间隔(秒)",
10
14
  "polling_help": "从 Autodarts Boardmanager 检索数据的轮询间隔(以秒为单位)。",
11
15
  "power_target": "功率目标 ID",
12
16
  "power_target_help": "通过 Autodarts 控制电源的电源目标的 ID(例如“switch.darts_socket”)。留空以禁用电源控制。",
13
17
  "reset": "触发-复位",
14
- "reset_help": "x 秒后重置三重触发器和靶心触发器(0 = 不重置)。",
18
+ "reset_help": "x 秒后重置三重、双重、靶心和错过触发(0 = 不重置)。",
15
19
  "triple_flag": "三重触发器的最小字段",
16
20
  "triple_flag2": "三重触发器的最大字段",
17
21
  "triple_flag2_help": "三重触发器的最大分数字段。分数高于此值的飞镖将不会触发三重触发数据点。",
@@ -1,350 +1,369 @@
1
1
  {
2
2
  "i18n": true,
3
- "type": "panel",
3
+ "type": "tabs",
4
4
  "items": {
5
- "intro": {
6
- "type": "staticText",
7
- "text": "intro_txt",
8
- "newLine": true,
9
- "sm": 12,
10
- "xs": 12,
11
- "md": 12,
12
- "lg": 12,
13
- "xl": 12,
14
- "style": {
15
- "border-bottom": "1px solid",
16
- "borderRadius": "0px",
17
- "padding": "8px",
18
- "marginBottom": "10px",
19
- "textAlign": "center",
20
- "font-size": "24px"
21
- }
22
- },
23
- "host": {
24
- "type": "text",
25
- "label": "host_ip",
26
- "help": "host_ip_help",
27
- "newLine": true,
28
- "sm": 12,
29
- "xs": 12,
30
- "md": 6,
31
- "lg": 6,
32
- "xl": 6,
33
- "style": {
34
- "marginTop": "10px",
35
- "marginBottom": "10px"
36
- }
37
- },
38
- "port": {
39
- "type": "number",
40
- "label": "host_port",
41
- "newLine": false,
42
- "sm": 12,
43
- "xs": 12,
44
- "md": 6,
45
- "lg": 6,
46
- "xl": 6,
47
- "style": {
48
- "marginTop": "10px",
49
- "marginBottom": "10px"
50
- }
51
- },
52
- "tripleMinScore": {
53
- "type": "select",
54
- "label": "triple_flag",
55
- "help": "triple_flag_help",
56
- "default": 1,
57
- "options": [
58
- {
59
- "label": "1",
60
- "value": 1
61
- },
62
- {
63
- "label": "2",
64
- "value": 2
65
- },
66
- {
67
- "label": "3",
68
- "value": 3
69
- },
70
- {
71
- "label": "4",
72
- "value": 4
73
- },
74
- {
75
- "label": "5",
76
- "value": 5
77
- },
78
- {
79
- "label": "6",
80
- "value": 6
81
- },
82
- {
83
- "label": "7",
84
- "value": 7
85
- },
86
- {
87
- "label": "8",
88
- "value": 8
89
- },
90
- {
91
- "label": "9",
92
- "value": 9
93
- },
94
- {
95
- "label": "10",
96
- "value": 10
97
- },
98
- {
99
- "label": "11",
100
- "value": 11
101
- },
102
- {
103
- "label": "12",
104
- "value": 12
105
- },
106
- {
107
- "label": "13",
108
- "value": 13
109
- },
110
- {
111
- "label": "14",
112
- "value": 14
113
- },
114
- {
115
- "label": "15",
116
- "value": 15
117
- },
118
- {
119
- "label": "16",
120
- "value": 16
121
- },
122
- {
123
- "label": "17",
124
- "value": 17
125
- },
126
- {
127
- "label": "18",
128
- "value": 18
129
- },
130
- {
131
- "label": "19",
132
- "value": 19
133
- },
134
- {
135
- "label": "20",
136
- "value": 20
5
+ "_options": {
6
+ "type": "panel",
7
+ "label": "options",
8
+ "icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjYuNDU4MzM4bW0iIGhlaWdodD0iMjYuNDU4MzM2bW0iIHZpZXdCb3g9IjAgMCA3NS4wMDAxNiA3NS4wMDAwOTgiIGlkPSJzdmcxNjUiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMgaWQ9ImRlZnMxNjUiIC8+PGcgaWQ9ImxheWVyMSIgc3R5bGU9Im9wYWNpdHk6MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTE1Ny41MDAyNSkiPjxnIGlkPSJnODMiPjxwYXRoIGQ9Im0gMTU3LjUwMDI1LDAgdiA3NS4wMDAxMjUgaCA3NS4wMDAxMyBWIDAgWiIgc3R5bGU9ImRpc3BsYXk6aW5saW5lO29wYWNpdHk6MTtmaWxsOiM4MDAwMDAwMDtmaWxsLW9wYWNpdHk6MC4yMjU7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNzUzMzc2O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgaWQ9InBhdGgxNTQtNS03LTkiIC8+PGcgaWQ9ImcxOCIgdHJhbnNmb3JtPSJtYXRyaXgoMS41MDAwMDI0LDAsMCwxLjUwMDAwMjQsMTU3LjUwMDI1LDIuNWUtNikiIHN0eWxlPSJkaXNwbGF5OmlubGluZTtvcGFjaXR5OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIj48cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGQ9Im0gNDYuOTk5LDI3LjcwOCB2IC01LjUgbCAtNi41NDYsLTEuMDcgYyAtMC4zODgsLTEuNTUgLTAuOTk2LC0zLjAwNyAtMS43OTgsLTQuMzQyIEwgNDIuNDcsMTEuMzU5IDM4LjU4LDcuNDcyIDMzLjIxMiwxMS4zMzEgQyAzMS44NzQsMTAuNTIxIDMwLjQwNyw5LjkwMyAyOC44NDYsOS41MTQgTCAyNy43MDYsMyBoIC01LjUgbCAtMS4wNiw2LjQ5MiBjIC0xLjU2MiwwLjM4MyAtMy4wMzcsMC45OTMgLTQuMzc5LDEuNzk5IGwgLTUuMzUyLC0zLjgyNCAtMy44ODksMy44ODcgMy43NjUsNS4zODQgYyAtMC44MTQsMS4zNDcgLTEuNDMzLDIuODIgLTEuODI2LDQuMzkyIGwgLTYuNDY0LDEuMDc2IHYgNS41IGwgNi40NTcsMS4xNDUgYyAwLjM5LDEuNTY4IDEuMDA5LDMuMDQxIDEuODI2LDQuMzkxIGwgLTMuODE2LDUuMzM3IDMuODg3LDMuODkxIDUuMzkxLC0zLjc3NiBjIDEuMzQ2LDAuODA4IDIuODE3LDEuNDIzIDQuMzc5LDEuODA4IEwgMjIuMjA2LDQ3IGggNS41IGwgMS4xNTYsLTYuNTEzIGMgMS41NTQsLTAuMzk0IDMuMDIyLC0xLjAxMyA0LjM1NSwtMS44MjQgbCA1LjQyOCwzLjgwOSAzLjg4OCwtMy44OTEgLTMuODc1LC01LjM4IGMgMC44MDIsLTEuMzM1IDEuNDExLC0yLjc5NCAxLjc5NSwtNC4zNDQgeiIgaWQ9InBhdGgxLTMiIC8+PGNpcmNsZSBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjEiIGN4PSIyNSIgY3k9IjI1IiByPSI3IiBpZD0iY2lyY2xlMSIgLz48L2c+PC9nPjwvZz48c3R5bGUgdHlwZT0idGV4dC9jc3MiIGlkPSJzdHlsZTEiPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0MntmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qze2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDV7ZmlsbDojRkZGRkZGO30uc3Q2e3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Q3e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDh7ZmlsbDpub25lO30uc3Q5e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fTwvc3R5bGU+PHN0eWxlIHR5cGU9InRleHQvY3NzIiBpZD0ic3R5bGUxLTUiPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0MntmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qze2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDV7ZmlsbDojRkZGRkZGO30uc3Q2e3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Q3e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDh7ZmlsbDpub25lO30uc3Q5e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fTwvc3R5bGU+PC9zdmc+Cg==",
9
+ "items": {
10
+ "_connection": {
11
+ "type": "panel",
12
+ "label": "options_connection",
13
+ "xs": 12,
14
+ "sm": 12,
15
+ "md": 6,
16
+ "lg": 6,
17
+ "xl": 6,
18
+ "items": {
19
+ "host": {
20
+ "type": "text",
21
+ "label": "host_ip",
22
+ "help": "host_ip_help",
23
+ "newLine": true,
24
+ "xs": 12,
25
+ "sm": 12,
26
+ "md": 6,
27
+ "lg": 6,
28
+ "xl": 6,
29
+ "style": {
30
+ "marginTop": "10px",
31
+ "marginBottom": "10px"
32
+ }
33
+ },
34
+ "port": {
35
+ "type": "number",
36
+ "label": "host_port",
37
+ "help": "host_port_help",
38
+ "newLine": false,
39
+ "xs": 12,
40
+ "sm": 12,
41
+ "md": 6,
42
+ "lg": 6,
43
+ "xl": 6,
44
+ "style": {
45
+ "marginTop": "10px",
46
+ "marginBottom": "10px"
47
+ }
48
+ }
49
+ }
50
+ },
51
+ "_logic": {
52
+ "type": "panel",
53
+ "label": "options_logic",
54
+ "xs": 12,
55
+ "sm": 12,
56
+ "md": 12,
57
+ "lg": 12,
58
+ "xl": 12,
59
+ "items": {
60
+ "tripleMinScore": {
61
+ "type": "select",
62
+ "label": "triple_flag",
63
+ "help": "triple_flag_help",
64
+ "default": 1,
65
+ "options": [
66
+ {
67
+ "label": "1",
68
+ "value": 1
69
+ },
70
+ {
71
+ "label": "2",
72
+ "value": 2
73
+ },
74
+ {
75
+ "label": "3",
76
+ "value": 3
77
+ },
78
+ {
79
+ "label": "4",
80
+ "value": 4
81
+ },
82
+ {
83
+ "label": "5",
84
+ "value": 5
85
+ },
86
+ {
87
+ "label": "6",
88
+ "value": 6
89
+ },
90
+ {
91
+ "label": "7",
92
+ "value": 7
93
+ },
94
+ {
95
+ "label": "8",
96
+ "value": 8
97
+ },
98
+ {
99
+ "label": "9",
100
+ "value": 9
101
+ },
102
+ {
103
+ "label": "10",
104
+ "value": 10
105
+ },
106
+ {
107
+ "label": "11",
108
+ "value": 11
109
+ },
110
+ {
111
+ "label": "12",
112
+ "value": 12
113
+ },
114
+ {
115
+ "label": "13",
116
+ "value": 13
117
+ },
118
+ {
119
+ "label": "14",
120
+ "value": 14
121
+ },
122
+ {
123
+ "label": "15",
124
+ "value": 15
125
+ },
126
+ {
127
+ "label": "16",
128
+ "value": 16
129
+ },
130
+ {
131
+ "label": "17",
132
+ "value": 17
133
+ },
134
+ {
135
+ "label": "18",
136
+ "value": 18
137
+ },
138
+ {
139
+ "label": "19",
140
+ "value": 19
141
+ },
142
+ {
143
+ "label": "20",
144
+ "value": 20
145
+ }
146
+ ],
147
+ "newLine": true,
148
+ "xs": 12,
149
+ "sm": 12,
150
+ "md": 6,
151
+ "lg": 6,
152
+ "xl": 6,
153
+ "style": {
154
+ "marginTop": "10px",
155
+ "marginBottom": "10px"
156
+ }
157
+ },
158
+ "tripleMaxScore": {
159
+ "type": "select",
160
+ "label": "triple_flag2",
161
+ "help": "triple_flag2_help",
162
+ "default": 20,
163
+ "options": [
164
+ {
165
+ "label": "1",
166
+ "value": 1
167
+ },
168
+ {
169
+ "label": "2",
170
+ "value": 2
171
+ },
172
+ {
173
+ "label": "3",
174
+ "value": 3
175
+ },
176
+ {
177
+ "label": "4",
178
+ "value": 4
179
+ },
180
+ {
181
+ "label": "5",
182
+ "value": 5
183
+ },
184
+ {
185
+ "label": "6",
186
+ "value": 6
187
+ },
188
+ {
189
+ "label": "7",
190
+ "value": 7
191
+ },
192
+ {
193
+ "label": "8",
194
+ "value": 8
195
+ },
196
+ {
197
+ "label": "9",
198
+ "value": 9
199
+ },
200
+ {
201
+ "label": "10",
202
+ "value": 10
203
+ },
204
+ {
205
+ "label": "11",
206
+ "value": 11
207
+ },
208
+ {
209
+ "label": "12",
210
+ "value": 12
211
+ },
212
+ {
213
+ "label": "13",
214
+ "value": 13
215
+ },
216
+ {
217
+ "label": "14",
218
+ "value": 14
219
+ },
220
+ {
221
+ "label": "15",
222
+ "value": 15
223
+ },
224
+ {
225
+ "label": "16",
226
+ "value": 16
227
+ },
228
+ {
229
+ "label": "17",
230
+ "value": 17
231
+ },
232
+ {
233
+ "label": "18",
234
+ "value": 18
235
+ },
236
+ {
237
+ "label": "19",
238
+ "value": 19
239
+ },
240
+ {
241
+ "label": "20",
242
+ "value": 20
243
+ }
244
+ ],
245
+ "newLine": false,
246
+ "xs": 12,
247
+ "sm": 12,
248
+ "md": 6,
249
+ "lg": 6,
250
+ "xl": 6,
251
+ "style": {
252
+ "marginTop": "10px",
253
+ "marginBottom": "10px"
254
+ }
255
+ },
256
+ "triggerResetSec": {
257
+ "type": "number",
258
+ "label": "reset",
259
+ "help": "reset_help",
260
+ "default": 0,
261
+ "newLine": true,
262
+ "xs": 12,
263
+ "sm": 12,
264
+ "md": 6,
265
+ "lg": 6,
266
+ "xl": 6,
267
+ "style": {
268
+ "marginTop": "10px",
269
+ "marginBottom": "10px"
270
+ }
271
+ },
272
+ "intervalSec": {
273
+ "type": "select",
274
+ "label": "polling",
275
+ "help": "polling_help",
276
+ "default": 1,
277
+ "options": [
278
+ {
279
+ "label": "0.5 s",
280
+ "value": 0.5
281
+ },
282
+ {
283
+ "label": "0.75 s",
284
+ "value": 0.75
285
+ },
286
+ {
287
+ "label": "1 s",
288
+ "value": 1
289
+ },
290
+ {
291
+ "label": "1.5 s",
292
+ "value": 1.5
293
+ },
294
+ {
295
+ "label": "2 s",
296
+ "value": 2
297
+ },
298
+ {
299
+ "label": "2.5 s",
300
+ "value": 2.5
301
+ },
302
+ {
303
+ "label": "3 s",
304
+ "value": 3
305
+ }
306
+ ],
307
+ "newLine": true,
308
+ "xs": 12,
309
+ "sm": 12,
310
+ "md": 6,
311
+ "lg": 6,
312
+ "xl": 6,
313
+ "style": {
314
+ "marginTop": "10px",
315
+ "marginBottom": "10px"
316
+ }
317
+ }
318
+ }
319
+ },
320
+ "outro": {
321
+ "type": "staticText",
322
+ "text": "Team inventwo • <a href=\"https://github.com/inventwo\">https://github.com/inventwo</a> • by skvarel",
323
+ "newLine": true,
324
+ "xs": 12,
325
+ "sm": 12,
326
+ "md": 12,
327
+ "lg": 12,
328
+ "xl": 12,
329
+ "style": {
330
+ "borderTop": "1px solid",
331
+ "borderRadius": "0px",
332
+ "padding": "8px",
333
+ "marginTop": "10px",
334
+ "textAlign": "center",
335
+ "fontSize": "larger"
336
+ }
137
337
  }
138
- ],
139
- "newLine": true,
140
- "sm": 12,
141
- "xs": 12,
142
- "md": 6,
143
- "lg": 6,
144
- "xl": 6,
145
- "style": {
146
- "marginTop": "10px",
147
- "marginBottom": "10px"
148
338
  }
149
339
  },
150
- "tripleMaxScore": {
151
- "type": "select",
152
- "label": "triple_flag2",
153
- "help": "triple_flag2_help",
154
- "default": 20,
155
- "options": [
156
- {
157
- "label": "1",
158
- "value": 1
159
- },
160
- {
161
- "label": "2",
162
- "value": 2
163
- },
164
- {
165
- "label": "3",
166
- "value": 3
167
- },
168
- {
169
- "label": "4",
170
- "value": 4
171
- },
172
- {
173
- "label": "5",
174
- "value": 5
175
- },
176
- {
177
- "label": "6",
178
- "value": 6
179
- },
180
- {
181
- "label": "7",
182
- "value": 7
183
- },
184
- {
185
- "label": "8",
186
- "value": 8
187
- },
188
- {
189
- "label": "9",
190
- "value": 9
191
- },
192
- {
193
- "label": "10",
194
- "value": 10
195
- },
196
- {
197
- "label": "11",
198
- "value": 11
199
- },
200
- {
201
- "label": "12",
202
- "value": 12
203
- },
204
- {
205
- "label": "13",
206
- "value": 13
207
- },
208
- {
209
- "label": "14",
210
- "value": 14
211
- },
212
- {
213
- "label": "15",
214
- "value": 15
215
- },
216
- {
217
- "label": "16",
218
- "value": 16
219
- },
220
- {
221
- "label": "17",
222
- "value": 17
223
- },
224
- {
225
- "label": "18",
226
- "value": 18
227
- },
228
- {
229
- "label": "19",
230
- "value": 19
231
- },
232
- {
233
- "label": "20",
234
- "value": 20
340
+ "_datapoints": {
341
+ "type": "panel",
342
+ "label": "mappings",
343
+ "icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgdmVyc2lvbj0iMS4xIiB3aWR0aD0iMjYuNDU4MzM0bW0iIGhlaWdodD0iMjYuNDU4MzI2bW0iIHZpZXdCb3g9IjAgMCA3NS4wMDAxNDkgNzUuMDAwMDcxIiBpZD0ic3ZnMTY1IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzIGlkPSJkZWZzMTY1IiAvPjxnIGlkPSJsYXllcjEiIHN0eWxlPSJvcGFjaXR5OjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC03MDguNjYxMTEsLTIwNDcuNDEzMykiPjxnIGlkPSJnMzc5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC43NTAxMTUsLTAuMDkwMDE4NTMpIj48cGF0aCBkPSJtIDYyOS45MTEsMjA0Ny41MDMzIHYgNzUuMDAwMSBoIDc1LjAwMDEyIHYgLTc1LjAwMDEgeiIgc3R5bGU9ImRpc3BsYXk6aW5saW5lO2ZpbGw6IzgwMDAwMDAwO2ZpbGwtb3BhY2l0eTowLjIyNTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MC43NTMzNzY7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiBpZD0icGF0aDE1NC05LTctMTgtNS04LTYtNy04LTQtMiIgLz48ZyBpZD0iZzM3MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzguNzUwMTMxLC0yLjQ3MDc2OTNlLTUpIj48cGF0aCBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjIuMjU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIiBkPSJtIDYwMi4zOTM0NSwyMDY1LjcxNDggaCAxNC4yNTAwMiBsIDEwZS02LC0xNC4yNSIgaWQ9InBhdGgzNzEtMCIgLz48cGF0aCBpZD0icGF0aDM2My0yLTEiIHN0eWxlPSJmaWxsOm5vbmU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6Mi4yNTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gNTU1LjAwMDg5LDIwODUuMDAzNCBjIC0zZS01LC0xOC41OSAxNS4wNzAxLC0zMy42NjAxIDMzLjY2MDA1LC0zMy42NjAxIDExLjEyMjE3LDAgMjAuOTg0NDIsNS4zOTQ0IDI3LjExMzE1LDEzLjcwOTUiIC8+PC9nPjxnIGlkPSJnMzczLTUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCw2MjguMDM2MDIsMjA4NS4wMDM0KSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoyLjI1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgZD0ibSA2MDIuMzkzNDUsMjA2NS43MTQ4IGggMTQuMjUwMDIgbCAxMGUtNiwtMTQuMjUiIGlkPSJwYXRoMzcxLTAtNyIgLz48cGF0aCBpZD0icGF0aDM2My0yLTEtNSIgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoyLjI1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0ibSA1NTUuMDAwODksMjA4NS4wMDM0IGMgLTNlLTUsLTE4LjU5IDE1LjA3MDEsLTMzLjY2MDEgMzMuNjYwMDUsLTMzLjY2MDEgMTEuMTIyMTcsMCAyMC45ODQ0Miw1LjM5NDQgMjcuMTEzMTUsMTMuNzA5NSIgLz48L2c+PC9nPjwvZz48c3R5bGUgdHlwZT0idGV4dC9jc3MiIGlkPSJzdHlsZTEiPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0MntmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qze2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDV7ZmlsbDojRkZGRkZGO30uc3Q2e3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Q3e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDh7ZmlsbDpub25lO30uc3Q5e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fTwvc3R5bGU+PHN0eWxlIHR5cGU9InRleHQvY3NzIiBpZD0ic3R5bGUxLTUiPi5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qxe2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0MntmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Qze2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9LnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDV7ZmlsbDojRkZGRkZGO30uc3Q2e3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30uc3Q3e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fS5zdDh7ZmlsbDpub25lO30uc3Q5e2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7fTwvc3R5bGU+PC9zdmc+Cg==",
344
+ "items": {
345
+ "lightTargetId": {
346
+ "type": "objectId",
347
+ "label": "light_target",
348
+ "help": "light_target_help",
349
+ "newLine": true,
350
+ "xs": 12,
351
+ "sm": 12,
352
+ "md": 6,
353
+ "lg": 6,
354
+ "xl": 6
355
+ },
356
+ "powerTargetId": {
357
+ "type": "objectId",
358
+ "label": "power_target",
359
+ "help": "power_target_help",
360
+ "newLine": false,
361
+ "xs": 12,
362
+ "sm": 12,
363
+ "md": 6,
364
+ "lg": 6,
365
+ "xl": 6
235
366
  }
236
- ],
237
- "newLine": false,
238
- "sm": 12,
239
- "xs": 12,
240
- "md": 6,
241
- "lg": 6,
242
- "xl": 6,
243
- "style": {
244
- "marginTop": "10px",
245
- "marginBottom": "10px"
246
- }
247
- },
248
- "triggerResetSec": {
249
- "type": "number",
250
- "label": "reset",
251
- "help": "reset_help",
252
- "default": 0,
253
- "newLine": true,
254
- "sm": 12,
255
- "xs": 12,
256
- "md": 12,
257
- "lg": 12,
258
- "xl": 12,
259
- "style": {
260
- "marginTop": "10px",
261
- "marginBottom": "10px"
262
- }
263
- },
264
- "intervalSec": {
265
- "type": "select",
266
- "label": "polling",
267
- "help": "polling_help",
268
- "default": 1,
269
- "options": [
270
- {
271
- "label": "0.5 s",
272
- "value": 0.5
273
- },
274
- {
275
- "label": "0.75 s",
276
- "value": 0.75
277
- },
278
- {
279
- "label": "1 s",
280
- "value": 1
281
- },
282
- {
283
- "label": "1.5 s",
284
- "value": 1.5
285
- },
286
- {
287
- "label": "2 s",
288
- "value": 2
289
- },
290
- {
291
- "label": "2.5 s",
292
- "value": 2.5
293
- },
294
- {
295
- "label": "3 s",
296
- "value": 3
297
- }
298
- ],
299
- "newLine": true,
300
- "sm": 12,
301
- "xs": 12,
302
- "md": 12,
303
- "lg": 12,
304
- "xl": 12,
305
- "style": {
306
- "marginTop": "10px",
307
- "marginBottom": "10px"
308
- }
309
- },
310
- "lightTargetId": {
311
- "type": "objectId",
312
- "label": "light_target",
313
- "help": "light_target_help",
314
- "newLine": true,
315
- "sm": 12,
316
- "xs": 12,
317
- "md": 6,
318
- "lg": 6,
319
- "xl": 6
320
- },
321
- "powerTargetId": {
322
- "type": "objectId",
323
- "label": "power_target",
324
- "help": "power_target_help",
325
- "newLine": false,
326
- "sm": 12,
327
- "xs": 12,
328
- "md": 6,
329
- "lg": 6,
330
- "xl": 6
331
- },
332
- "outro": {
333
- "type": "staticText",
334
- "text": "Team inventwo • <a href=\"https://github.com/inventwo\">https://github.com/inventwo</a> • by skvarel",
335
- "newLine": true,
336
- "sm": 12,
337
- "xs": 12,
338
- "md": 12,
339
- "lg": 12,
340
- "xl": 12,
341
- "style": {
342
- "border-top": "1px solid",
343
- "borderRadius": "0px",
344
- "padding": "8px",
345
- "marginTop": "10px",
346
- "textAlign": "center",
347
- "font-size": "larger"
348
367
  }
349
368
  }
350
369
  }
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "autodarts",
4
- "version": "0.5.1",
4
+ "version": "0.6.1",
5
5
  "news": {
6
+ "0.6.1": {
7
+ "en": "New: Settings page reworked to use two tabs (`OPTIONS` and `MAPPINGS`) for better clarity.\nNew: Mapping of ioBroker objects for board light and board power in the **MAPPINGS** tab.\nImproved: Layout of the configuration page (field widths, spacing, texts) for a more symmetric and clean UI.\nImproved: Updated option descriptions in the admin UI.",
8
+ "de": "Neu: Einstellungen Seite neu bearbeitet, um zwei Registerkarten (`OPTIONS` und `MAPPINGS`) für bessere Klarheit zu verwenden.\nNeu: Mapping von ioBroker Objekten für Board-Licht und Board-Power im **MAPPINGS** Tab.\nVerbessert: Layout der Konfigurationsseite (Feldbreiten, Abstand, Texte) für eine symmetrischere und sauberere UI.\nVerbessert: Aktualisierte Optionsbeschreibungen im Admin UI.",
9
+ "ru": "Новая страница настроек, переработанная для использования двух вкладок («ВЫБОРЫ» и «МАППИНГЫ») для большей ясности.\nНовое: Картирование объектов ioBroker для освещения доски и питания доски во вкладке **MAPPINGS**.\nУлучшено: Раскладка страницы конфигурации (ширина поля, интервал, тексты) для более симметричного и чистого пользовательского интерфейса.\nУлучшенный: Обновленные описания опций в пользовательском интерфейсе администратора.",
10
+ "pt": "Novo: Página de configurações retrabalhou para usar duas abas (`OPTIONS' e `APPPINGS`) para melhor clareza.\nNovo: Mapeamento de objetos ioBroker para luz de placa e poder de placa na aba ** MAPPINGS**.\nMelhorado: Disposição da página de configuração (larguras de campo, espaçamento, textos) para uma interface mais simétrica e limpa.\nMelhorado: Descrições atualizadas da opção na interface de administração.",
11
+ "nl": "Nieuw: De pagina Instellingen herwerkt om twee tabbladen te gebruiken voor een betere helderheid.\nNieuw: Mapping van ioBroker objecten voor board licht en board power in de **MAPPINGS** tab.\nVerbeterd: Indeling van de configuratiepagina (veldbreedtes, afstand, teksten) voor een meer symmetrische en schone UI.\nVerbeterd: Bijgewerkte optiebeschrijvingen in de admin UI.",
12
+ "fr": "Nouveau : la page Paramètres a été retravaillée pour utiliser deux onglets (`OPTIONS` et `MAPPINGS`) pour une meilleure clarté.\nNouveau : Cartographie des objets ioBroker pour la lumière et la puissance de la planche dans l'onglet **MAPPINGS**.\nAmélioration : Mise en page de configuration (largeurs de champs, espacement, textes) pour une interface utilisateur plus symétrique et propre.\nAmélioration : Mise à jour des descriptions des options dans l'interface utilisateur admin.",
13
+ "it": "Nuovo: Impostazioni pagina rielaborata per utilizzare due schede (`OPTIONS` e `MAPPINGS`) per una migliore chiarezza.\nNuovo: mappatura di oggetti ioBroker per luce di bordo e alimentazione di bordo nella scheda **MAPPINGS**.\nMigliorato: Layout della pagina di configurazione (larghezza campo, spaziatura, testi) per un'interfaccia utente più simmetrica e pulita.\nMigliorato: le descrizioni delle opzioni aggiornate nell'interfaccia utente di admin.",
14
+ "es": "Nuevo: página Ajustes reelaborado para utilizar dos pestañas (`OPTIONS` y `MAPPINGS') para una mejor claridad.\nNuevo: Mapping of ioBroker objects for board light and board power in the **MAPPINGS** tab.\nMejorado: Diseño de la página de configuración (ancho de campo, espaciado, textos) para una interfaz de usuario más simétrica y limpia.\nMejorado: Actualización de las descripciones de opciones en la interfaz de usuario del administrador.",
15
+ "pl": "Nowy: Strona Ustawienia przepracowała, aby użyć dwóch kart (\"OPTIONS\" i \"MAPPINGS\") dla większej jasności.\nNowy: Mapowanie obiektów jOBroker dla oświetlenia planszy i mocy planszy w zakładce ** MAPPINGS* *. \nUlepszony: Układ strony konfiguracji (szerokość pola, odstępy, teksty) dla bardziej symetrycznego i czystego interfejsu użytkownika.\nUlepszone: Aktualizacja opisów opcji w Interfejsie administracyjnym.",
16
+ "uk": "Новинка: Настроювання сторінки, що перетворюються на використання двох вкладок (`OPTIONS` і `MAPPINGS`) для кращої чіткості.\nНовий: Mapping of ioBroker об'єктів для плати світла і потужності дошки в вкладці **MAPPINGS***.\nПокращується: Схема розміщення сторінки конфігурації (ширині поля, інтервали, тексти) для більш симетричного і чистого інтерфейсу.\nПокращено: Оновлено описи опцій в адмін UI.",
17
+ "zh-cn": "新建: 设置页面重修, 使用两个标签( \" OPTIONS \" 和 \" MAPPINGS \" ) , 以便更加清晰.\nNew:在**MAPPINGS**标签中绘制用于板光和板电的ioBroker对象的映射.\n改进:配置页面的布局(字段宽度,间距,文本),用于更加对称和干净的UI.\n改进:更新了管理员UI中的选项描述."
18
+ },
19
+ "0.6.0": {
20
+ "en": "Added: New throw.isMiss state to detect and trigger automations on missed darts (including auto-reset via triggerResetSec).\nAdded: New throw.isDouble state to detect and trigger automations on double segments (including auto-reset via triggerResetSec).",
21
+ "de": "Hinzugefügt: Neue Wurf. isMiss-Zustand zu erkennen und Automatisierungen auf verpassten Darts auszulösen (einschließlich Auto-Reset über triggerResetSec).\nHinzugefügt: Neue Wurf. ist doppelter Zustand, um Automatisierungen auf Doppelsegmenten zu erkennen und auszulösen (einschließlich Auto-Reset über triggerResetSec).",
22
+ "ru": "Добавлено: Новый бросок. состояние Мисс для обнаружения и запуска автоматизации на пропущенных дротиках (включая автоматическое сброс через триггерResetSec).\nДобавлено: Новый бросок. Двойное состояние для обнаружения и запуска автоматизации в двойных сегментах (включая автоперезагрузку через триггерResetSec).",
23
+ "pt": "Adicionado: Novo lançamento. isMiss estado para detectar e ativar automações em dardos perdidos (incluindo auto-reset via triggerResetSec).\nAdicionado: Novo lançamento. isDouble state to detect and active automations in double segments (incluindo auto-reset via triggerResetSec).",
24
+ "nl": "Toegevoegd: Nieuwe worp. isMiss staat te detecteren en te triggeren automatisering op gemiste darts (inclusief auto-reset via triggerResetSec).\nToegevoegd: Nieuwe worp. isDubbele toestand te detecteren en te triggeren automatiseringen op dubbele segmenten (inclusief auto-reset via triggerResetSec).",
25
+ "fr": "Ajouté : Nouveau lancer. isMiss state pour détecter et déclencher les automatismes sur les fléchettes oubliées (y compris auto-reset via triggerResetSec).\nAjouté : Nouveau lancer. est l'état double pour détecter et déclencher les automatismes sur les doubles segments (y compris auto-reset via triggerResetSec).",
26
+ "it": "Aggiunto: Nuovo tiro. isMiss stato per rilevare e attivare le automazioni sulle freccette mancate (compreso il ripristino automatico tramite triggerResetSec).\nAggiunto: Nuovo tiro. isDouble state per rilevare e attivare le automazioni su due segmenti (compreso il ripristino automatico tramite triggerResetSec).",
27
+ "es": "Añadido: Nuevo lanzamiento. isMiss state para detectar y desencadenar automatizaciones en dardos perdidos (incluyendo el ajuste automático a través de triggerResetSec).\nAñadido: Nuevo lanzamiento. isDoble estado para detectar y desencadenar automatizaciones en segmentos dobles (incluyendo el ajuste automático a través de triggerResetSec).",
28
+ "pl": "Dodano: nowy rzut. isMiss stan do wykrywania i uruchamiania automatyzacji na nieodebranych rzutki (w tym auto- reset poprzez triggerResetSec).\nDodano: nowy rzut. isDouble state do wykrywania i uruchamiania automatyzacji na podwójnych segmentach (w tym auto- reset poprzez triggerResetSec).",
29
+ "uk": "Доданий: Новий кицька. isMiss держава для виявлення та запуску автоматизації на пропущених darts (включаючи автозавантаження через тригерResetSec).\nДоданий: Новий кицька. єподвійним станом для виявлення та запуску автоматизації на подвійних сегментах (включаючи автозавантаження через тригерResetSec).",
30
+ "zh-cn": "添加:新掷. 是Miss State,用于检测和触发对丢失的飞镖的自动化(包括通过触发器ResetSec自动重置).\n添加:新掷. isDouble状态在双片段上检测和触发自动化(包括通过触发ResetSec自动重置)."
31
+ },
6
32
  "0.5.1": {
7
33
  "en": "Fixed: Hardware light/power mapping now respects configured target IDs and works on all systems.",
8
34
  "de": "Behoben: Hardware-Licht/Strom-Mapping respektiert nun konfigurierte Ziel-IDs und arbeitet an allen Systemen.",
@@ -67,32 +93,6 @@
67
93
  "pl": "* *ENHANCED* *: Naprawiono wszystkie błędy typu TypeScript poprzez dodanie właściwych definicji typów dla właściwości konfiguracyjnych \n* *ENHANCED* *: Refactored HTTP request handling - created realisable httpHelper module to elimination code duplication \n* *ENHANCED* *: Konwertowany HTTP połączeń backback prośby async / czekać wzór dla lepszej obsługi błędów \n* *ENHANCED* *: Ulepszone logowanie stanu połączenia - teraz loguje się, gdy połączenie jest przywrócone po offline \n* *ENHANCED* *: Standaryzowane async / czekać na wykorzystanie we wszystkich stanowych opiekunów zmian dla spójności \n* *FIXED* *: Usunięto nieużywaną zmienną błędu w metodzie fetchVersion \n* *FIXED* *: Dodano poprawny typ błędu sprawdzający w fetchConfig, aby zapobiec błędom w runtime \n* *TESTING* *: Dodano kompleksowe testy jednostkowe dla modułu httpHelper obejmujące sukcesy, timeout i scenariusze błędów ",
68
94
  "uk": "**ENHANCED**: Виправлено всі помилки типу TypeScript, додаючи правильні визначення типу для властивостей конфігурації\n**ENHANCED**: Перефакторований HTTP-запитування - створений багаторазовий модуль HTTPHelper для усунення дублікатів коду\n**ENHANCED**: Конвертовані запити на основі HTTP-повідомлень на основі async/await для кращої обробки помилок\n**ENHANCED***: Покращується з'єднання держреєстрації - тепер журнали, коли з'єднання відновлюється після офлайн\n**ENHANCED***: стандартизоване використання async/await у всіх ручках зі змінами стану для консистенції\n**FIXED**: Видалено невикористану змінну помилку в методі fetchVersion\n**FIXED***: Додано належну перевірку типу помилки в fetchConfig, щоб запобігти помилки часу\n**TESTING***: Додано комплексні тести для модуля httpHelper, що охоплює успіхи, часовий час та сценарії помилок",
69
95
  "zh-cn": "** ENHANCED**:通过添加适当的配置属性类型定义来固定所有类型脚本类型错误\n** ENHANCED **: 重置了 HTTP 请求处理 - 创建了可重复使用的 httpHelper 模块,以消除代码重复\n** ENHANCED**: 将基于 HTTP 回调请求转换为同步/等待模式,以更好地处理错误\n** ENHANCED **: 连接状态记录的改进 -- -- 下线后恢复连接时的日志\n** ENHANCED**:所有州变化处理器的标准化合成/等待使用,以保持一致\n** FIXED**:删除了拾取Version 方法中的未使用错误变量\n** FIXED**:在获取中添加适当的错误类型检查Config以防止运行时间错误\n** TESTING**:为httpHelper模块添加了涵盖成功、超时和错误情景的综合单元测试"
70
- },
71
- "0.3.1": {
72
- "en": "Changed: Object creation now uses extendObjectAsync with proper roles and types instead of setObjectNotExistsAsync.",
73
- "de": "Geändert: Objekt-Erstellung verwendet jetzt ExtendedObjectAsync mit richtigen Rollen und Typen anstelle von Set ObjectNotExistsAsync.",
74
- "ru": "Изменилось: Создание объектов теперь использует extendObjectAsync с правильными ролями и типами вместо набора ObjectNotExistsAsync.",
75
- "pt": "Alterado: Criação de objetos agora usa extendObjectAsync com papéis e tipos apropriados em vez de set ObjectNotExistsAsync.",
76
- "nl": "Gewijzigd: Objectcreatie maakt nu gebruik van extendObjectAsync met juiste rollen en typen in plaats van set ObjectNietBestaatAsync.",
77
- "fr": "Changement : La création d'objet utilise désormais extensionObjectAsync avec des rôles et types appropriés au lieu de set ObjetNotExistsAsync.",
78
- "it": "Cambiato: Creazione oggetti ora utilizza extendObjectAsync con ruoli e tipi appropriati invece di set ObjectNotExistsAsync.",
79
- "es": "Cambio: La creación de objetos ahora utiliza ExtendObjectAsync con roles y tipos adecuados en lugar de conjunto ObjectNoExistsAsync.",
80
- "pl": "Zmieniono: Tworzenie obiektu wykorzystuje teraz extendObjectAsync z odpowiednimi rolami i typami zamiast zestawu ObjectNotExistsAsync.",
81
- "uk": "Змінено: Створення об'єктів тепер використовує розширенняObjectAsync з відповідними ролями та типами замість набору Об'єктNotExistsAsync.",
82
- "zh-cn": "已更改 : 对象创建现在使用扩展对象Async , 并配有合适的角色和类型而不是设定 Object NotExists Async. (原始内容存档于2018-09-31)."
83
- },
84
- "0.3.0": {
85
- "en": "Added traffic light datapoints (`status.trafficLightColor`, `status.trafficLightState`) mapped from Board Manager status (`Throw` / `Takeout` / connection errors).\nRefactored code: visit handling, throw handling (triple / bull) and traffic light logic moved to separate modules.",
86
- "de": "Es wurden Verkehrslichtdatenpunkte (`status.trafficLightColor`, `status.trafficLightState`) aus dem Status Board Manager (`Throw` / `Takeout` / Verbindungsfehler) abgebildet.\nRefactored Code: Besuchen Sie Handling, Wurf Handling (Triple / Bull) und Ampellogik in separate Module bewegt.",
87
- "ru": "Добавлены точки данных светофора («status.trafficLightColor», «status.trafficLightState»), отображаемые из статуса менеджера совета директоров («Бросить» / «Выбрать» / ошибки подключения).\nРефакторированный код: обработка посещений, обработка бросков (тройной / бычий) и логика светофора перемещаются в отдельные модули.",
88
- "pt": "Pontos de dados de semáforo adicionados (`status.trafficLightColor`, `status.trafficLightState`) mapeados a partir do status do Board Manager (`Throw` / `Takeout` / erros de conexão).\nCódigo refatorizado: manipulação de visita, manuseio de arremesso (triplo / touro) e lógica de semáforo movido para módulos separados.",
89
- "nl": "Toegevoegd verkeerslicht datapoints (.\nRefactored code: bezoeken handling, gooien handling (triple / stier) en verkeerslicht logica verplaatst naar aparte modules.",
90
- "fr": "Ajout de points de données de feux de circulation (`status.trafficLightColor`, `status.trafficLightState`) cartographié à partir de l'état du gestionnaire du conseil d'administration (`Throw` / `Takeout` / erreurs de connexion).\nCode refactoré: visite de la manipulation, la manipulation de lancer (triple / taureau) et la logique du feu de circulation déplacé vers des modules séparés.",
91
- "it": "Aggiunti i datapoint del semaforo (`status.trafficLightColor`, `status.trafficLightState`) mappati dallo stato del Board Manager (`Throw` / `Takeout` / errori di connessione).\nCodice Refactored: visit handling, pitch handling (triple / bull) e logica del semaforo spostato a moduli separati.",
92
- "es": "Los puntos de datos de la luz de tráfico ( \"status.trafficLightColor \" , \"status.trafficLightState \" ) se mapearon con el estado de administrador de la Junta ( \" THrow \" / \" Takeout \" / errores de conexión).\nCódigo refactorizado: manejo de visitas, manejo de tiro (triple / toro) y lógica de tráfico se movió a módulos separados.",
93
- "pl": "Dodano punkty danych świateł drogowych (\"status.traffic LightColor\", \"status.traffic LightState\"), które zostały odwzorowane ze statusu zarządu (\"Throw\" / \"Takeout\" / błędy połączeń).\nZmieniony kod: obsługa odwiedzin, obsługa rzutów (potrójny / byk) i logika światła drogowego przeniesiona do oddzielnych modułów.",
94
- "uk": "Додано точки світла трафіку (`status.trafficLightColor`, `status.trafficLightState`) на карті Board Manager (`Throw` / `Takeout` / помилки підключення).\nРефакторний код: візитна обробка, кидання (стриптиз / бик) і логіка трафіку переходить на окремі модулі.",
95
- "zh-cn": "增加从董事会管理者身份绘制的交通灯数据点(`Status.trafficLightColor ' ,`Status.trafficLight Station ' ) (`扔'/`Takeout ' /连接错误).\n重构代码:访问处理,投掷处理(三重/公牛)和交通灯逻辑移动到单独的模块."
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/lib/throw.js CHANGED
@@ -74,6 +74,42 @@ async function init(adapter) {
74
74
  },
75
75
  native: {},
76
76
  });
77
+ await adapter.extendObjectAsync("throw.isMiss", {
78
+ type: "state",
79
+ common: {
80
+ name: {
81
+ en: "Miss",
82
+ de: "Kein Treffer",
83
+ },
84
+ type: "boolean",
85
+ role: "indicator",
86
+ read: true,
87
+ write: false,
88
+ desc: {
89
+ en: "true if the dart did not hit a valid scoring segment",
90
+ de: "true, wenn der Dart kein gültiges Punktesegment getroffen hat",
91
+ },
92
+ },
93
+ native: {},
94
+ });
95
+ await adapter.extendObjectAsync("throw.isDouble", {
96
+ type: "state",
97
+ common: {
98
+ name: {
99
+ en: "Double hit",
100
+ de: "Doppel getroffen",
101
+ },
102
+ type: "boolean",
103
+ role: "indicator",
104
+ read: true,
105
+ write: false,
106
+ desc: {
107
+ en: "true if the dart hit a double segment",
108
+ de: "true, wenn ein Dart ein Doppel-Segment getroffen hat",
109
+ },
110
+ },
111
+ native: {},
112
+ });
77
113
  }
78
114
 
79
115
  /**
@@ -108,50 +144,46 @@ async function updateThrow(adapter, lastDart) {
108
144
 
109
145
  const isTriple =
110
146
  !!lastDart?.segment && lastDart.segment.multiplier === 3 && segment >= minScore && segment <= maxScore;
147
+ const isDouble = !!lastDart?.segment && lastDart.segment.multiplier === 2;
111
148
 
112
149
  const segName = (lastDart?.segment?.name || "").toUpperCase();
113
150
  const isBullseye = segName.includes("BULL") || lastDart?.segment?.number === 25;
151
+ const isMiss = !lastDart?.segment || score === 0;
114
152
 
115
153
  await adapter.setStateAsync("throw.current", { val: score, ack: true });
116
154
 
117
155
  // Timer für Auto-Reset abbrechen
118
- // @ts-expect-error - tripleResetTimer is a custom property in the Autodarts adapter class
119
- if (adapter.tripleResetTimer) {
120
- // @ts-expect-error - tripleResetTimer is a custom property in the Autodarts adapter class
121
- clearTimeout(adapter.tripleResetTimer);
122
- // @ts-expect-error - tripleResetTimer is a custom property in the Autodarts adapter class
123
- adapter.tripleResetTimer = null;
124
- }
125
- // @ts-expect-error - bullResetTimer is a custom property in the Autodarts adapter class
126
- if (adapter.bullResetTimer) {
127
- // @ts-expect-error - bullResetTimer is a custom property in the Autodarts adapter class
128
- clearTimeout(adapter.bullResetTimer);
129
- // @ts-expect-error - bullResetTimer is a custom property in the Autodarts adapter class
130
- adapter.bullResetTimer = null;
156
+ // @ts-expect-error - resetTimer is a custom property in the Autodarts adapter class
157
+ if (adapter.resetTimer) {
158
+ // @ts-expect-error - resetTimer is a custom property in the Autodarts adapter class
159
+ clearTimeout(adapter.resetTimer);
160
+ // @ts-expect-error - resetTimer is a custom property in the Autodarts adapter class
161
+ adapter.resetTimer = null;
131
162
  }
132
163
 
133
164
  await adapter.setStateAsync("throw.isTriple", { val: isTriple, ack: true });
165
+ await adapter.setStateAsync("throw.isDouble", { val: isDouble, ack: true });
134
166
  await adapter.setStateAsync("throw.isBullseye", { val: isBullseye, ack: true });
167
+ await adapter.setStateAsync("throw.isMiss", { val: isMiss, ack: true });
135
168
 
136
169
  // @ts-expect-error - triggerResetSecRuntime is a custom property in the Autodarts adapter class
137
170
  const timeoutMs = (Number(adapter.triggerResetSecRuntime) || 0) * 1000;
138
171
  if (timeoutMs > 0) {
139
- if (isTriple) {
140
- // @ts-expect-error - tripleResetTimer is a custom property in the Autodarts adapter class
141
- adapter.tripleResetTimer = setTimeout(() => {
172
+ adapter.resetTimer = setTimeout(() => {
173
+ if (isTriple) {
142
174
  adapter.setState("throw.isTriple", { val: false, ack: true });
143
- // @ts-expect-error - tripleResetTimer is a custom property in the Autodarts adapter class
144
- adapter.tripleResetTimer = null;
145
- }, timeoutMs);
146
- }
147
- if (isBullseye) {
148
- // @ts-expect-error - bullResetTimer is a custom property in the Autodarts adapter class
149
- adapter.bullResetTimer = setTimeout(() => {
175
+ }
176
+ if (isDouble) {
177
+ adapter.setState("throw.isDouble", { val: false, ack: true });
178
+ }
179
+ if (isBullseye) {
150
180
  adapter.setState("throw.isBullseye", { val: false, ack: true });
151
- // @ts-expect-error - bullResetTimer is a custom property in the Autodarts adapter class
152
- adapter.bullResetTimer = null;
153
- }, timeoutMs);
154
- }
181
+ }
182
+ if (isMiss) {
183
+ adapter.setState("throw.isMiss", { val: false, ack: true });
184
+ }
185
+ adapter.resetTimer = null;
186
+ }, timeoutMs);
155
187
  }
156
188
  }
157
189
 
package/main.js CHANGED
@@ -1,3 +1,4 @@
1
+ // main.js
1
2
  "use strict";
2
3
 
3
4
  const utils = require("@iobroker/adapter-core");
@@ -26,10 +27,9 @@ class Autodarts extends utils.Adapter {
26
27
  this.tripleMinScoreRuntime = null; // Laufzeitwert für Triple-Minschwelle
27
28
  this.tripleMaxScoreRuntime = null; // Laufzeitwert für Triple-Maxschwelle
28
29
 
29
- // NEU: Reset-Timeout + Timer für isTriple/isBullseye
30
+ // Reset-Timeout + Timer für isTriple/isBullseye/isDouble/isMiss
30
31
  this.triggerResetSecRuntime = null;
31
- this.tripleResetTimer = null;
32
- this.bullResetTimer = null;
32
+ this.resetTimer = null;
33
33
  }
34
34
 
35
35
  async onReady() {
@@ -706,11 +706,8 @@ class Autodarts extends utils.Adapter {
706
706
  if (this.versionTimer) {
707
707
  clearInterval(this.versionTimer);
708
708
  }
709
- if (this.tripleResetTimer) {
710
- clearTimeout(this.tripleResetTimer);
711
- }
712
- if (this.bullResetTimer) {
713
- clearTimeout(this.bullResetTimer);
709
+ if (this.resetTimer) {
710
+ clearTimeout(this.resetTimer);
714
711
  }
715
712
  callback();
716
713
  } catch {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.autodarts",
3
- "version": "0.5.1",
3
+ "version": "0.6.1",
4
4
  "description": "Autodarts Autoscoring",
5
5
  "author": "skvarel <skvarel@inventwo.com>",
6
6
  "contributors": [