iobroker.autodarts 0.8.2 → 1.0.0
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 +16 -87
- package/admin/i18n/de.json +1 -1
- package/admin/i18n/en.json +1 -1
- package/admin/i18n/es.json +2 -2
- package/admin/i18n/fr.json +3 -3
- package/admin/i18n/it.json +3 -3
- package/admin/i18n/nl.json +3 -3
- package/admin/i18n/pl.json +2 -2
- package/admin/i18n/pt.json +3 -3
- package/admin/i18n/ru.json +2 -2
- package/admin/i18n/uk.json +2 -2
- package/admin/i18n/zh-cn.json +2 -2
- package/admin/jsonConfig.json +5 -2
- package/io-package.json +27 -27
- package/lib/throw.js +38 -76
- package/lib/tools.js +33 -12
- package/main.js +123 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,9 +56,9 @@ Connects to your local Autodarts Board Manager (via IP and port, e.g. `192.168.x
|
|
|
56
56
|
- **`config.triggerResetSec`**: Auto-reset time for triple/double/bullseye/miss flags
|
|
57
57
|
|
|
58
58
|
### Tools Addon Integration
|
|
59
|
-
- **`tools.RAW`**: Input state used to receive events from browser tools (e.g. busted, gameon, gameshot).
|
|
60
|
-
- **`
|
|
61
|
-
- **`tools.config.
|
|
59
|
+
- **`tools.RAW`**: Input state used to receive events from browser tools (e.g. busted, gameon, gameshot, 180, matchshot, takeout).
|
|
60
|
+
- **`trigger.is180/isBusted/isGameon/isGameshot/isMatchshot/isTakeout`**: Read-only trigger flags set when corresponding events received via `tools.RAW`.
|
|
61
|
+
- **`tools.config.url*`**: Pre-generated HTTP URLs (simple-api calls) that can be copied into Tools for Autodarts browser extension.
|
|
62
62
|
|
|
63
63
|
## What this adapter does NOT do
|
|
64
64
|
|
|
@@ -132,6 +132,15 @@ In **HELP & FAQ** you will find general information and help about the adapter a
|
|
|
132
132
|
<!--
|
|
133
133
|
### **WORK IN PROGRESS**
|
|
134
134
|
-->
|
|
135
|
+
### 1.0.0 (2026-01-11)
|
|
136
|
+
- (skvarel) BREAKING CHANGE: All triggers to unified trigger.is structure
|
|
137
|
+
- (skvarel) Manual cleanup required: Delete old autodarts.X.throw.is and tools. states after update
|
|
138
|
+
- (skvarel) Unchanged: tools.RAW, tools.config.url, all timers/functionality
|
|
139
|
+
|
|
140
|
+
### 0.8.3 (2026-01-06)
|
|
141
|
+
- (skvarel) Added: CHANGELOG_OLD.md
|
|
142
|
+
- (skvarel) Improved: Link to documentation added to the help section.
|
|
143
|
+
|
|
135
144
|
### 0.8.2 (2026-01-05)
|
|
136
145
|
- (skvarel) Fixed: ImageURL
|
|
137
146
|
|
|
@@ -143,91 +152,11 @@ In **HELP & FAQ** you will find general information and help about the adapter a
|
|
|
143
152
|
### 0.8.0 (2026-01-04)
|
|
144
153
|
- (skvarel) Added: New **TOOLS ADDON INTEGRATION** tab and runtime-generated URL states under `tools.config.*` for browser-based integrations (e.g. Tools for Autodarts).
|
|
145
154
|
|
|
146
|
-
|
|
155
|
+
## 0.7.3 (2026-01-03)
|
|
147
156
|
- (skvarel) Fix Adapter Checker Warnings
|
|
148
157
|
|
|
149
|
-
|
|
150
|
-
- (
|
|
151
|
-
|
|
152
|
-
### 0.7.1 (2025-12-31)
|
|
153
|
-
- (skvarel) Changed: Reduced reconnect delay after offline.
|
|
154
|
-
|
|
155
|
-
### 0.7.0 (2025-12-31)
|
|
156
|
-
- (skvarel) Added: New `status.boardStatus` state. Status indicator of board event (e.g. `"Stopped"`, `"Calibration finished"`, `"Started"`).
|
|
157
|
-
|
|
158
|
-
### 0.6.3 (2025-12-30)
|
|
159
|
-
- (skvarel) Improved: Connection handling now uses `info.connection` and clearly marks the adapter as offline when the Autodarts Board Manager is not reachable (including better timeout/ECONNRESET handling).
|
|
160
|
-
- (skvarel) Changed: Reduced log noise when the board is offline – only one warning is logged when the connection is lost, subsequent timeouts are written as debug messages.
|
|
161
|
-
- (skvarel) Improved: Minor tweaks to the HELP & FAQ tab texts and configuration descriptions.
|
|
162
|
-
|
|
163
|
-
### 0.6.2 (2025-12-29)
|
|
164
|
-
- (skvarel) Improved: Settings page reworked to use three tabs (`OPTIONS`, `MAPPINGS` and `HELP & FAQ`) for better clarity.
|
|
165
|
-
|
|
166
|
-
### 0.6.1 (2025-12-29)
|
|
167
|
-
- (skvarel) New: Settings page reworked to use two tabs (`OPTIONS` and `MAPPINGS`) for better clarity.
|
|
168
|
-
- (skvarel) New: Mapping of ioBroker objects for board light and board power in the **MAPPINGS** tab.
|
|
169
|
-
- (skvarel) Improved: Layout of the configuration page (field widths, spacing, texts) for a more symmetric and clean UI.
|
|
170
|
-
- (skvarel) Improved: Updated option descriptions in the admin UI.
|
|
171
|
-
|
|
172
|
-
### 0.6.0 (2025-12-28)
|
|
173
|
-
- (skvarel) Added: New throw.isMiss state to detect and trigger automations on missed darts (including auto-reset via triggerResetSec).
|
|
174
|
-
- (skvarel) Added: New throw.isDouble state to detect and trigger automations on double segments (including auto-reset via triggerResetSec).
|
|
175
|
-
|
|
176
|
-
### 0.5.1 (2025-12-28)
|
|
177
|
-
- (skvarel) Fixed: Hardware light/power mapping now respects configured target IDs and works on all systems.
|
|
178
|
-
|
|
179
|
-
### 0.5.0 (2025-12-28)
|
|
180
|
-
- (skvarel) Added: Bidirectional hardware control states `system.hardware.light` and `system.hardware.power`
|
|
181
|
-
- (skvarel) Added: Configuration options to map light/power states to external ioBroker states (e.g., 0_userdata)
|
|
182
|
-
- (skvarel) Changed: Hardware states now support read/write operations for full automation integration
|
|
183
|
-
|
|
184
|
-
### 0.4.0 (2025-12-28)
|
|
185
|
-
- (skvarel) Changed: Restructured system information into dedicated `system.hardware`, `system.software` and `system.cams` channels.
|
|
186
|
-
- (skvarel) Added: New software info states (`desktopVersion`, `boardVersion`, `platform`, `os`) and hardware info states (`kernelArch`, `cpuModel`, `hostname`).
|
|
187
|
-
- (skvarel) Added: Camera configuration states `system.cams.cam0/1/2` containing JSON with width, height and fps.
|
|
188
|
-
- (skvarel) Changed: Adapter configuration for polling interval and triple trigger thresholds is now fully driven via jsonConfig (dropdowns and number fields).
|
|
189
|
-
- (skvarel) Removed: Experimental light/power alias mapping from internal logic (no user-visible feature was released).
|
|
190
|
-
|
|
191
|
-
### 0.3.3 (2025-12-27)
|
|
192
|
-
- (skvarel) Changed: Configuration fields interval and triggerReset now use seconds instead of milliseconds in the admin UI.
|
|
193
|
-
|
|
194
|
-
### 0.3.2 (2025-12-27)
|
|
195
|
-
- (DrozmotiX) **ENHANCED**: Fixed all TypeScript type errors by adding proper type definitions for config properties
|
|
196
|
-
- (DrozmotiX) **ENHANCED**: Refactored HTTP request handling - created reusable httpHelper module to eliminate code duplication
|
|
197
|
-
- (DrozmotiX) **ENHANCED**: Converted HTTP callback-based requests to async/await pattern for better error handling
|
|
198
|
-
- (DrozmotiX) **ENHANCED**: Improved connection state logging - now logs when connection is restored after being offline
|
|
199
|
-
- (DrozmotiX) **ENHANCED**: Standardized async/await usage across all state change handlers for consistency
|
|
200
|
-
- (DrozmotiX) **FIXED**: Removed unused error variable in fetchVersion method
|
|
201
|
-
- (DrozmotiX) **FIXED**: Added proper error type checking in fetchConfig to prevent runtime errors
|
|
202
|
-
- (DrozmotiX) **TESTING**: Added comprehensive unit tests for httpHelper module covering success, timeout, and error scenarios
|
|
203
|
-
|
|
204
|
-
### 0.3.1 (2025-12-27)
|
|
205
|
-
- (skvarel) Changed: Object creation now uses extendObjectAsync with proper roles and types instead of setObjectNotExistsAsync.
|
|
206
|
-
|
|
207
|
-
### 0.3.0 (2025-12-26)
|
|
208
|
-
- (skvarel) Added traffic light datapoints (`status.trafficLightColor`, `status.trafficLightState`) mapped from Board Manager status (`Throw` / `Takeout` / connection errors).
|
|
209
|
-
- (skvarel) Refactored code: visit handling, throw handling (triple / bull) and traffic light logic moved to separate modules.
|
|
210
|
-
|
|
211
|
-
### 0.2.2 (2025-12-25)
|
|
212
|
-
- (skvarel) bugfix
|
|
213
|
-
|
|
214
|
-
### 0.2.1 (2025-12-25)
|
|
215
|
-
- (skvarel) Reset for triple and bullseye trigger added
|
|
216
|
-
|
|
217
|
-
### 0.2.0 (2025-12-25)
|
|
218
|
-
- (skvarel) Added datapoint for bulls-hit
|
|
219
|
-
- (skvarel) Added maximun triple-hit flag score
|
|
220
|
-
- (skvarel) Update config
|
|
221
|
-
- (skvarel) Warning in log cleared
|
|
222
|
-
|
|
223
|
-
### 0.1.0 (2025-12-23)
|
|
224
|
-
- (skvarel) Added: Datapoints for visit score, current dart score, triple-hit flag with configurable minimum score
|
|
225
|
-
- (skvarel) Added: Camera configuration states (cam0–cam2)
|
|
226
|
-
- (skvarel) Changed: Cleaned up adapter logic and internal polling/timing
|
|
227
|
-
- (skvarel) Changed: Updated translations
|
|
228
|
-
|
|
229
|
-
### 0.0.14 - 0.0.2 (2025-12-21 - 2025-12-22)
|
|
230
|
-
- (skvarel) Initial release with multiple fixes for adapter checker compliance and documentation improvements
|
|
158
|
+
## Older changes
|
|
159
|
+
- [CHANGELOG_OLD.md](CHANGELOG_OLD.md)
|
|
231
160
|
|
|
232
161
|
## License
|
|
233
162
|
MIT License
|
|
@@ -250,4 +179,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
250
179
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
251
180
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
252
181
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
253
|
-
SOFTWARE.
|
|
182
|
+
SOFTWARE.
|
package/admin/i18n/de.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Maximales Feld für den Triple-Trigger",
|
|
37
37
|
"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.",
|
|
38
38
|
"triple_flag_help": "Feld „Mindestpunktzahl“ für den Triple-Trigger. Darts mit einer Punktzahl unter diesem Wert lösen den Triple-Trigger-Datenpunkt nicht aus.",
|
|
39
|
-
"txt_one": "<b>Dieser Adapter verbindet den lokalen Autodarts Board-Manager mit dem ioBroker.</b><br><br
|
|
39
|
+
"txt_one": "<b>Dieser Adapter verbindet den lokalen Autodarts Board-Manager mit dem ioBroker.</b><br><br>• Konfiguriere die Verbindung unter <b>OPTIONEN</b> (Host, Port, Intervall, Triple Range).<br>• Ordne Licht- und Powerziele unter <b>ZUWEISUNGEN</b> zu.<br>• Nutze die erstellten Zustände (Würfe, Ampel, Hardware) in der Visualisierungen, den Skripten und Szenen.<br>• Verknüpfe Tools für Autodarts mit dem Adapter.",
|
|
40
40
|
"txt_tools": "Auf dieser Registerkarte wird die Integration mit der Browsererweiterung „Tools for Autodarts“ konfiguriert.<br><br>Um sie verwenden zu können, muss die Browsererweiterung installiert sein und der ioBroker Simple-API-Adapter ausgeführt und über deinen Browser erreichbar sein.",
|
|
41
41
|
"txt_two": "... weitere Informationen folgen in Kürze!"
|
|
42
42
|
}
|
package/admin/i18n/en.json
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"mappings": "Hardware Mappings",
|
|
21
21
|
"options_connection": "Connection Options",
|
|
22
22
|
"options_logic": "Logic Options",
|
|
23
|
-
"txt_one": "<b>This adapter connects your local Autodarts Board Manager to ioBroker.</b><br><br
|
|
23
|
+
"txt_one": "<b>This adapter connects your local Autodarts Board Manager to ioBroker.</b><br><br>• Configure the connection under OPTIONS (host, port, polling, triple range).<br>• Map light and power targets under MAPPINGS.<br>• Use the created states (throws, traffic light, hardware) in your visualizations, scripts and scenes.<br> • Link Tools for Autodarts with the adapter.",
|
|
24
24
|
"light_txt": "Light Control Mapping (optional)",
|
|
25
25
|
"light_txt_desc": "Get your lighting data points into the adapter objects.",
|
|
26
26
|
"power_txt": "Power Control Mapping (optional)",
|
package/admin/i18n/es.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Campo máximo para el triple disparador",
|
|
37
37
|
"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.",
|
|
38
38
|
"triple_flag_help": "Campo de puntuación mínima para el triple disparador. Los dardos con una puntuación inferior a este valor no activarán el punto de datos Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Este adaptador conecta su Autodarts Board Manager local a ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "Esta pestaña configura la integración con la extensión del navegador “Herramientas para Autodarts”.<br>Para usarla, debe tener la extensión del navegador instalada y el adaptador ioBroker simple-api ejecutándose y accesible desde su navegador.",
|
|
39
|
+
"txt_one": "<b>Este adaptador conecta su Autodarts Board Manager local a ioBroker.</b><br><br>• Configure la conexión en OPCIONES (host, puerto, sondeo, rango triple).<br>• Asigne objetivos de luz y energía en MAPEO.<br>• Utilice los estados creados (tiros, semáforo, hardware) en sus visualizaciones, scripts y escenas.<br> • Vincule herramientas para Autodarts con el adaptador.",
|
|
40
|
+
"txt_tools": "Esta pestaña configura la integración con la extensión del navegador “Herramientas para Autodarts”.<br><br>Para usarla, debe tener la extensión del navegador instalada y el adaptador ioBroker simple-api ejecutándose y accesible desde su navegador.",
|
|
41
41
|
"txt_two": "... ¡más información próximamente!"
|
|
42
42
|
}
|
package/admin/i18n/fr.json
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"reset_help": "Réinitialisez les déclencheurs triple, double, bullseye et miss après x secondes (0 = pas de réinitialisation).",
|
|
27
27
|
"tools_instance": "Numéro d'instance Autodarts",
|
|
28
28
|
"tools_instance_help": "0 pour autodarts.0, 1 pour autodarts.1, etc.",
|
|
29
|
-
"tools_ip": "Adresse IP d
|
|
29
|
+
"tools_ip": "Adresse IP d’ioBroker",
|
|
30
30
|
"tools_ip_help": "IP ou nom d'hôte où votre adaptateur ioBroker / simple-api est accessible.",
|
|
31
31
|
"tools_port": "Port de l'adaptateur simple-api",
|
|
32
32
|
"tools_port_help": "Par défaut : 8087",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Champ maximum pour le triple déclencheur",
|
|
37
37
|
"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.",
|
|
38
38
|
"triple_flag_help": "Champ de score minimum pour le triple déclencheur. Les fléchettes avec un score inférieur à cette valeur ne déclencheront pas le point de données Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Cet adaptateur connecte votre Autodarts Board Manager local à ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "Cet onglet configure l'intégration avec l'extension de navigateur « Outils pour Autodarts ».<br>Pour l'utiliser, vous devez avoir installé l'extension de navigateur et l'adaptateur simple-api ioBroker exécuté et accessible depuis votre navigateur.",
|
|
39
|
+
"txt_one": "<b>Cet adaptateur connecte votre Autodarts Board Manager local à ioBroker.</b><br><br>• Configurez la connexion sous OPTIONS (hôte, port, sondage, triple plage).<br>• Cartographiez les cibles lumineuses et électriques sous MAPPINGS.<br>• Utilisez les états créés (lancements, feux de circulation, matériel) dans vos visualisations, scripts et scènes.<br> • Liez les outils pour Autodarts avec l'adaptateur.",
|
|
40
|
+
"txt_tools": "Cet onglet configure l'intégration avec l'extension de navigateur « Outils pour Autodarts ».<br><br>Pour l'utiliser, vous devez avoir installé l'extension de navigateur et l'adaptateur simple-api ioBroker exécuté et accessible depuis votre navigateur.",
|
|
41
41
|
"txt_two": "... plus d'informations à venir !"
|
|
42
42
|
}
|
package/admin/i18n/it.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"tools_instance": "Numero di istanza di Autodarts",
|
|
28
28
|
"tools_instance_help": "0 per autodarts.0, 1 per autodarts.1, ecc.",
|
|
29
29
|
"tools_ip": "Indirizzo IP di ioBroker",
|
|
30
|
-
"tools_ip_help": "IP o nome host in cui
|
|
30
|
+
"tools_ip_help": "IP o nome host in cui il tuo ioBroker/adattatore simple-api è raggiungibile.",
|
|
31
31
|
"tools_port": "Porta dell'adattatore API semplice",
|
|
32
32
|
"tools_port_help": "Predefinito: 8087",
|
|
33
33
|
"tools_tab": "Integrazione dei componenti aggiuntivi degli strumenti",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Campo massimo per il triplo trigger",
|
|
37
37
|
"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.",
|
|
38
38
|
"triple_flag_help": "Campo del punteggio minimo per il triplo trigger. Le freccette con un punteggio inferiore a questo valore non attiveranno il punto dati Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Questo adattatore collega il tuo Autodarts Board Manager locale a ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "Questa scheda configura l'integrazione con l'estensione del browser \"Strumenti per Autodarts\".<br>Per utilizzarla, è necessario avere l'estensione del browser installata e l'adattatore ioBroker simple-api in esecuzione e raggiungibile dal browser.",
|
|
39
|
+
"txt_one": "<b>Questo adattatore collega il tuo Autodarts Board Manager locale a ioBroker.</b><br><br>• Configura la connessione in OPZIONI (host, porta, polling, tripla portata).<br>• Mappa gli obiettivi di luce e potenza in MAPPINGS.<br>• Utilizza gli stati creati (lanci, semaforo, hardware) nelle tue visualizzazioni, script e scene.<br> • Collega Strumenti per Autodarts con l'adattatore.",
|
|
40
|
+
"txt_tools": "Questa scheda configura l'integrazione con l'estensione del browser \"Strumenti per Autodarts\".<br><br>Per utilizzarla, è necessario avere l'estensione del browser installata e l'adattatore ioBroker simple-api in esecuzione e raggiungibile dal browser.",
|
|
41
41
|
"txt_two": "...maggiori informazioni in arrivo!"
|
|
42
42
|
}
|
package/admin/i18n/nl.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"reset": "Trigger-reset (s)",
|
|
26
26
|
"reset_help": "Reset de drievoudige, dubbele, bullseye- en miss-trigger na x seconden (0 = geen reset).",
|
|
27
27
|
"tools_instance": "Autodarts-instantienummer",
|
|
28
|
-
"tools_instance_help": "0 voor autodarts.0, 1 voor autodarts.1,
|
|
28
|
+
"tools_instance_help": "0 voor autodarts.0, 1 voor autodarts.1, enz.",
|
|
29
29
|
"tools_ip": "IP-adres van ioBroker",
|
|
30
30
|
"tools_ip_help": "IP- of hostnaam waar uw ioBroker / simple-api-adapter bereikbaar is.",
|
|
31
31
|
"tools_port": "Poort van de Simple-API-adapter",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Maximaal veld voor de drievoudige trigger",
|
|
37
37
|
"triple_flag2_help": "Maximaal scoreveld voor de drievoudige trigger. Darten met een score boven deze waarde activeren het Triple-Trigger-datapunt niet.",
|
|
38
38
|
"triple_flag_help": "Minimumscoreveld voor de drievoudige trigger. Darten met een score onder deze waarde activeren het Triple-Trigger-datapunt niet.",
|
|
39
|
-
"txt_one": "<b>Deze adapter verbindt uw lokale Autodarts Board Manager met ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "Op dit tabblad wordt de integratie met de browserextensie 'Tools for Autodarts' geconfigureerd.<br>Om deze te gebruiken, moet de browserextensie zijn geïnstalleerd en moet de ioBroker simple-api-adapter actief zijn en bereikbaar zijn vanuit uw browser.",
|
|
39
|
+
"txt_one": "<b>Deze adapter verbindt uw lokale Autodarts Board Manager met ioBroker.</b><br><br>• Configureer de verbinding onder OPTIES (host, poort, polling, drievoudig bereik).<br>• Breng licht- en stroomdoelen in kaart onder MAPPINGS.<br>• Gebruik de gemaakte statussen (worpen, verkeerslicht, hardware) in uw visualisaties, scripts en scènes.<br> • Koppel tools voor Autodarts met de adapter.",
|
|
40
|
+
"txt_tools": "Op dit tabblad wordt de integratie met de browserextensie 'Tools for Autodarts' geconfigureerd.<br><br>Om deze te gebruiken, moet de browserextensie zijn geïnstalleerd en moet de ioBroker simple-api-adapter actief zijn en bereikbaar zijn vanuit uw browser.",
|
|
41
41
|
"txt_two": "... binnenkort meer informatie!"
|
|
42
42
|
}
|
package/admin/i18n/pl.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Maksymalne pole dla potrójnego wyzwalacza",
|
|
37
37
|
"triple_flag2_help": "Pole maksymalnego wyniku dla potrójnego wyzwalacza. Rzutki z wynikiem powyżej tej wartości nie uruchomią punktu danych Triple-Trigger.",
|
|
38
38
|
"triple_flag_help": "Pole minimalnego wyniku dla potrójnego wyzwalacza. Rzutki z wynikiem poniżej tej wartości nie uruchomią punktu danych Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Ten adapter łączy lokalnego menedżera
|
|
40
|
-
"txt_tools": "
|
|
39
|
+
"txt_one": "<b>Ten adapter łączy lokalnego menedżera Autodarts Board z ioBroker.</b><br><br> • Skonfiguruj połączenie w OPCJACH (host, port, odpytywanie, potrójny zasięg).<br> • Mapuj cele świetlne i energetyczne w obszarze MAPPINGS.<br> • Wykorzystaj utworzone stany (rzuty, sygnalizacja świetlna, sprzęt) w swoich wizualizacjach, skryptach i scenach.<br> • Połącz narzędzia dla Autodarts z adapterem.",
|
|
40
|
+
"txt_tools": "W tej zakładce konfigurowana jest integracja z rozszerzeniem przeglądarki „Narzędzia dla Autodarts”.<br><br>Aby z niego skorzystać, musisz mieć zainstalowane rozszerzenie przeglądarki oraz działający adapter prostego interfejsu API ioBroker, dostępny z poziomu przeglądarki.",
|
|
41
41
|
"txt_two": "...więcej informacji już wkrótce!"
|
|
42
42
|
}
|
package/admin/i18n/pt.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Campo máximo para o disparo triplo",
|
|
37
37
|
"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.",
|
|
38
38
|
"triple_flag_help": "Campo de pontuação mínima para o disparo triplo. Dardos com pontuação abaixo deste valor não acionarão o ponto de dados Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Este adaptador conecta seu Autodarts Board Manager local ao ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "Esta aba configura a integração com a extensão do navegador “Tools for Autodarts”.<br>Para utilizá-la, você deve ter a extensão do navegador instalada e o adaptador ioBroker simple-api em execução e acessível a partir do seu navegador.",
|
|
41
|
-
"txt_two": "...mais informações em breve!"
|
|
39
|
+
"txt_one": "<b>Este adaptador conecta seu Autodarts Board Manager local ao ioBroker.</b><br><br>• Configure a conexão em OPÇÕES (host, porta, polling, alcance triplo).<br>• Mapeie alvos de luz e energia em MAPEAMENTOS.<br>• Use os estados criados (lançamentos, semáforos, hardware) em suas visualizações, scripts e cenas.<br> • Vincule ferramentas para Autodarts com o adaptador.",
|
|
40
|
+
"txt_tools": "Esta aba configura a integração com a extensão do navegador “Tools for Autodarts”.<br><br>Para utilizá-la, você deve ter a extensão do navegador instalada e o adaptador ioBroker simple-api em execução e acessível a partir do seu navegador.",
|
|
41
|
+
"txt_two": "... mais informações em breve!"
|
|
42
42
|
}
|
package/admin/i18n/ru.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Максимальное поле для тройного триггера",
|
|
37
37
|
"triple_flag2_help": "Поле максимального результата для тройного триггера. Дартс с результатом выше этого значения не будет активировать точку данных тройного триггера.",
|
|
38
38
|
"triple_flag_help": "Поле минимального балла для тройного триггера. Дартс со счетом ниже этого значения не будет активировать точку данных тройного триггера.",
|
|
39
|
-
"txt_one": "<b>Этот адаптер подключает ваш локальный
|
|
40
|
-
"txt_tools": "На этой вкладке настраивается интеграция с расширением браузера «Инструменты для Autodarts».<br>Чтобы использовать его, у вас должно быть установлено расширение браузера и адаптер ioBroker simple-api, работающий и доступный из вашего браузера.",
|
|
39
|
+
"txt_one": "<b>Этот адаптер подключает ваш локальный диспетчер Autodarts Board к ioBroker.</b><br><br>• Настройте соединение в разделе ОПЦИИ (хост, порт, опрос, тройной диапазон).<br>• Сопоставьте цели освещения и мощности в разделе MAPPINGS.<br>• Используйте созданные состояния (броски, светофор, оборудование) в ваших визуализациях, сценариях и сценах.<br> • Свяжите инструменты для Autodarts с адаптером.",
|
|
40
|
+
"txt_tools": "На этой вкладке настраивается интеграция с расширением браузера «Инструменты для Autodarts».<br><br>Чтобы использовать его, у вас должно быть установлено расширение браузера и адаптер ioBroker simple-api, работающий и доступный из вашего браузера.",
|
|
41
41
|
"txt_two": "... дополнительная информация скоро появится!"
|
|
42
42
|
}
|
package/admin/i18n/uk.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "Максимальне поле для потрійного тригера",
|
|
37
37
|
"triple_flag2_help": "Поле максимального балу для потрійного тригера. Дартс із результатом вище цього значення не активує точку даних Triple-Trigger.",
|
|
38
38
|
"triple_flag_help": "Мінімальне поле для потрійного тригера. Дартс із результатом, нижчим за це значення, не активує точку даних Triple-Trigger.",
|
|
39
|
-
"txt_one": "<b>Цей адаптер підключає ваш локальний менеджер дошки Autodarts до ioBroker.</b><br><br
|
|
40
|
-
"txt_tools": "На цій вкладці налаштовується інтеграція з розширенням для
|
|
39
|
+
"txt_one": "<b>Цей адаптер підключає ваш локальний менеджер дошки Autodarts до ioBroker.</b><br><br>• Налаштуйте з’єднання в OPTIONS (хост, порт, опитування, потрійний діапазон).<br>• Зіставте світлові та потужні цілі в MAPPINGS.<br>• Використовуйте створені стани (кидки, світлофор, апаратне забезпечення) у своїх візуалізаціях, сценаріях і сценах.<br> • Зв’яжіть інструменти для Autodarts з адаптером.",
|
|
40
|
+
"txt_tools": "На цій вкладці налаштовується інтеграція з розширенням для веб-переглядача «Інструменти для Autodarts».<br><br>Щоб використовувати його, у вас має бути встановлено розширення для веб-переглядача та запущений адаптер ioBroker із простим API, доступний із вашого веб-переглядача.",
|
|
41
41
|
"txt_two": "... більше інформації буде незабаром!"
|
|
42
42
|
}
|
package/admin/i18n/zh-cn.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"triple_flag2": "三重触发器的最大字段",
|
|
37
37
|
"triple_flag2_help": "三重触发器的最大分数字段。分数高于此值的飞镖将不会触发三重触发数据点。",
|
|
38
38
|
"triple_flag_help": "三重触发器的最低分数字段。分数低于此值的飞镖将不会触发三重触发数据点。",
|
|
39
|
-
"txt_one": "<b>此适配器将您本地的 Autodarts Board Manager 连接到 ioBroker。</b><br><br
|
|
40
|
-
"txt_tools": "此选项卡配置与“Tools for Autodarts”浏览器扩展的集成。<br>要使用它,您必须安装浏览器扩展,并且 ioBroker simple-api 适配器正在运行并可通过浏览器访问。",
|
|
39
|
+
"txt_one": "<b>此适配器将您本地的 Autodarts Board Manager 连接到 ioBroker。</b><br><br>• 在“选项”(主机、端口、轮询、三重范围)下配置连接。<br>• 在“映射”下映射灯光和功率目标。<br>• 在可视化、脚本和场景中使用创建的状态(投掷、交通灯、硬件)。<br>• 将 Autodarts 工具与适配器链接。",
|
|
40
|
+
"txt_tools": "此选项卡配置与“Tools for Autodarts”浏览器扩展的集成。<br><br>要使用它,您必须安装浏览器扩展,并且 ioBroker simple-api 适配器正在运行并可通过浏览器访问。",
|
|
41
41
|
"txt_two": "...更多信息即将推出!"
|
|
42
42
|
}
|
package/admin/jsonConfig.json
CHANGED
|
@@ -515,7 +515,10 @@
|
|
|
515
515
|
},
|
|
516
516
|
"txtTwo": {
|
|
517
517
|
"type": "staticText",
|
|
518
|
-
"text":
|
|
518
|
+
"text": {
|
|
519
|
+
"en": "For complete documentation, click here below:<br><br>• <a href=\"https://github.com/inventwo/ioBroker.autodarts/blob/main/docs/en/README.md\">Adapter documentation</a>",
|
|
520
|
+
"de": "Für eine vollständige Dokumentation klicke hier unten:<br><br>• <a href=\"https://github.com/inventwo/ioBroker.autodarts/blob/main/docs/de/README.md\">Adapter-Dokumentation</a>"
|
|
521
|
+
},
|
|
519
522
|
"newLine": true,
|
|
520
523
|
"xs": 12,
|
|
521
524
|
"sm": 12,
|
|
@@ -524,7 +527,7 @@
|
|
|
524
527
|
"xl": 6,
|
|
525
528
|
"style": {
|
|
526
529
|
"marginTop": "50px",
|
|
527
|
-
"fontSize": "
|
|
530
|
+
"fontSize": "16px"
|
|
528
531
|
}
|
|
529
532
|
},
|
|
530
533
|
"logo": {
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "autodarts",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "1.0.0",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.0.0": {
|
|
7
|
+
"en": "BREAKING CHANGE: All triggers to unified trigger.is structure\nManual cleanup required: Delete old autodarts.X.throw.is and tools. states after update\nUnchanged: tools.RAW, tools.config.url, all timers/functionality",
|
|
8
|
+
"de": "BREAKING CHANGE: Alle Auslöser zum vereinheitlichten Auslöser. ist Struktur\nManuelle Reinigung erforderlich: Löschen Sie alte Autodarts. X.throw.is und Werkzeuge. Zustände nach Update\nUnverändert: Werkzeuge. RAW, tools.config.url, alle Timer/Funktionalität",
|
|
9
|
+
"ru": "Изменить дыхание: Все триггеры в единый триггер. структура\nТребуется ручная очистка: Удалите старые автодарты. X.throw.is и инструменты. государства после обновления\nБез изменений: инструменты. RAW, tools.config.url, все таймеры/функциональность",
|
|
10
|
+
"pt": "MUDANÇAS DE RISCO: Todos os gatilhos para o gatilho unificado. é estrutura\nLimpeza manual necessária: Apagar os autodarts antigos. X.throw.is e ferramentas. estados após a atualização\nInalterado: ferramentas. RAW, tools.config.url, todos os timers/funcionalidade",
|
|
11
|
+
"nl": "Breaking VERANDERING: Alle triggers naar uniforme trekker. is structuur\nHandmatig opruimen vereist: Verwijder oude autodarts. X.throw.is en gereedschap. staat na update\nOngewijzigd: gereedschap. RAW, tools.config.url, all timers/functionaliteit",
|
|
12
|
+
"fr": "CHANGEMENT DE BREAING: Tous les déclencheurs au déclencheur unifié. est la structure\nNettoyage manuel requis: Supprimer les anciens autodarts. X.throw. est et outils. États après mise à jour\nSans changement : outils. RAW, tools.config.url, toutes les minuteries/fonctionnalité",
|
|
13
|
+
"it": "CAMBIO DI BREAKING: Tutti i trigger per attivare unificato. è struttura\nPulizia manuale necessaria: Eliminare vecchi autodarts. X.throw.is e strumenti. stati dopo l'aggiornamento\nSvariato: strumenti. RAW, tools.config.url, tutti i timer/funzionalità",
|
|
14
|
+
"es": "Cambiando: Todos disparan al gatillo unificado. estructura\nLimpieza manual requerida: Eliminar viejos autodarts. X.throw.is y herramientas. estados después de la actualización\nSin cambios: herramientas. RAW, tools.config.url, todos los temporizadores/funcionalidad",
|
|
15
|
+
"pl": "ZMIANA ZBIORCZA: Wszystkie wyzwalacze do jednego zapalnika. jest strukturą\nWymagane jest ręczne czyszczenie: Usuń stare autodoty. X.throw.is i narzędzia. stany po aktualizacji\nBez zmian: narzędzia. RAW, narzędzia .config.url, wszystkie timery / funkcjonalność",
|
|
16
|
+
"uk": "БРЕАКІНГ ЗМІН: Всі тригери для уніфікованого тригера. структура\nВимоги: Видалити старі автодарти. X.throw.is та інструменти. стани після оновлення\nНезмінені: інструменти. RAW, інструменти.config.url, всі таймери/функціональність",
|
|
17
|
+
"zh-cn": "打破变化: 所有触发器统一触发. 是结构\n需要进行人工清理: 删除旧的自定义 。 X. throw.is和工具。 更新后状态\n未更改:工具。 RAW,工具.config.url,所有计时器/功能"
|
|
18
|
+
},
|
|
19
|
+
"0.8.3": {
|
|
20
|
+
"en": "Added: CHANGELOG_OLD.md\nImproved: Link to documentation added to the help section.",
|
|
21
|
+
"de": "Hinzugefügt: CHANGELOG_OLD.md\nVerbessert: Link zur Dokumentation, die im Hilfebereich hinzugefügt wird.",
|
|
22
|
+
"ru": "Добавлено: CHANGELOG_OLD.md\nУлучшено: Ссылка на документацию, добавленную в раздел справки.",
|
|
23
|
+
"pt": "Adicionado: MUDANÇA_OLD.md\nMelhorado: Link para documentação adicionada à seção de ajuda.",
|
|
24
|
+
"nl": "Toegevoegd: VERANDERINGLOG_OLD.md\nVerbeterd: Link naar documentatie toegevoegd aan de help sectie.",
|
|
25
|
+
"fr": "Ajouté : CHANGELOG_OLD.md\nAmélioration : Lien vers la documentation ajoutée à la section d'aide.",
|
|
26
|
+
"it": "Aggiunto: CHANGELOG_OLD.md\nMigliorato: Link alla documentazione aggiunta alla sezione di aiuto.",
|
|
27
|
+
"es": "Añadido: CHANGELOG_OLD.md\nMejorado: Enlace a la documentación agregada a la sección de ayuda.",
|
|
28
|
+
"pl": "Dodano: CHANGELOG _ OLD.md\nUlepszone: Link do dokumentacji dodanej do sekcji pomocy.",
|
|
29
|
+
"uk": "Доданий: CHANGELOG_OLD.md\nУдосконалено: Посилання на документацію, додану до розділу допомоги.",
|
|
30
|
+
"zh-cn": "添加:变换组_OLD.md\n改进:与帮助部分新增的文件链接."
|
|
31
|
+
},
|
|
6
32
|
"0.8.2": {
|
|
7
33
|
"en": "Fixed: ImageURL",
|
|
8
34
|
"de": "Behoben: ImageURL",
|
|
@@ -67,32 +93,6 @@
|
|
|
67
93
|
"pl": "Napraw rok Copyright",
|
|
68
94
|
"uk": "Фіксація авторського права",
|
|
69
95
|
"zh-cn": "修复版权年"
|
|
70
|
-
},
|
|
71
|
-
"0.7.1": {
|
|
72
|
-
"en": "Changed: Reduced reconnect delay after offline.",
|
|
73
|
-
"de": "Geändert: Reduzierte Reconnect-Verzögerung nach Offline.",
|
|
74
|
-
"ru": "Изменение: снижение задержки повторного подключения после офлайна.",
|
|
75
|
-
"pt": "Alterado: Reconectar atraso reduzido após offline.",
|
|
76
|
-
"nl": "Veranderd: Verminderde reconnect vertraging na offline.",
|
|
77
|
-
"fr": "Changed: Réduction du délai de reconnect après hors ligne.",
|
|
78
|
-
"it": "Cambiato: Riduzione del ritardo di ricollegamento dopo offline.",
|
|
79
|
-
"es": "Cambio: Reducir el retraso de reconexión después de fuera de línea.",
|
|
80
|
-
"pl": "Zmiana: Zmniejszone opóźnienie ponownego połączenia po offline.",
|
|
81
|
-
"uk": "Змінено: Зменшення затримки відключення після вимкнення.",
|
|
82
|
-
"zh-cn": "更改:下线后减少重联延迟."
|
|
83
|
-
},
|
|
84
|
-
"0.7.0": {
|
|
85
|
-
"en": "Added: New `status.boardStatus` state. Status indicator of board event (e.g. `\"Stopped\"`, `\"Calibration finished\"`, `\"Started\"`).",
|
|
86
|
-
"de": "Hinzugefügt: Neu `status.boardStatus` Zustand. Statusanzeige des Board-Events (z.B. \"Stopped\", \"Calibration fertig\", \"Started\"\").",
|
|
87
|
-
"ru": "Добавлено: Новое состояние \"status.boardStatus\". Индикатор состояния события на борту (например, \"Остановилось\", \"Калибровка завершена\", \"Начало\").",
|
|
88
|
-
"pt": "Adicionado: Novo estado `status.boardStatus`. Indicador de estado do evento de tabuleiro (por exemplo, `\"Parado\"`, `\"A calibração terminou\"`, `\"Iniciado\"`).",
|
|
89
|
-
"nl": "Toegevoegd: Nieuwe status.boardStatus Status-indicator van de gebeurtenis van het bord (bv. \"Stopped,\" \"Calibration finished\" en \"Started\").",
|
|
90
|
-
"fr": "Ajouté : Nouveau état `status.boardStatus`. Indicateur de l'état de l'événement du conseil d'administration (par exemple, ``Stopupped'``, `'Calibration terminée'`, `'Started'`).",
|
|
91
|
-
"it": "Aggiunto: New `status.boardStatus` state. Indicatore di stato dell'evento di bordo (ad esempio `\"Stopped\"`, `\"Calibrazione finita\"`, `\"Started\"`).",
|
|
92
|
-
"es": "Añadido: Nuevo estado de `status.boardStatus`. Indicador de estado del evento de la junta (por ejemplo, `\"Stopped\"`, `\"Calibration completed\" `, `\"Started').",
|
|
93
|
-
"pl": "Dodano: Nowy stan 'status.boardStatus'. Wskaźnik stanu zdarzenia planszowego (np. \"Zatrzymał\", \"Kalibracja zakończona\", \"Rozpoczęty\").",
|
|
94
|
-
"uk": "Додано: Новий стан `status.boardStatus`. Індикатор стану походу дошки (наприклад, ```'', ''''''', '''''''.",
|
|
95
|
-
"zh-cn": "添加:新的`状态.boardstatus'状态。 板块事件的状况指标(例如`停止'、`完成的校准'、`开始')."
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/lib/throw.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable jsdoc/require-param-description */
|
|
1
2
|
// lib/throw.js
|
|
2
3
|
"use strict";
|
|
3
4
|
|
|
@@ -10,10 +11,7 @@ async function init(adapter) {
|
|
|
10
11
|
await adapter.extendObjectAsync("throw", {
|
|
11
12
|
type: "channel",
|
|
12
13
|
common: {
|
|
13
|
-
name: {
|
|
14
|
-
en: "Current throw",
|
|
15
|
-
de: "Aktueller Wurf",
|
|
16
|
-
},
|
|
14
|
+
name: { en: "Current throw", de: "Aktueller Wurf" },
|
|
17
15
|
},
|
|
18
16
|
native: {},
|
|
19
17
|
});
|
|
@@ -21,92 +19,59 @@ async function init(adapter) {
|
|
|
21
19
|
await adapter.extendObjectAsync("throw.current", {
|
|
22
20
|
type: "state",
|
|
23
21
|
common: {
|
|
24
|
-
name: {
|
|
25
|
-
en: "Current dart score",
|
|
26
|
-
de: "Punkte aktueller Dart",
|
|
27
|
-
},
|
|
22
|
+
name: { en: "Current dart score", de: "Punkte aktueller Dart" },
|
|
28
23
|
type: "number",
|
|
29
24
|
role: "value",
|
|
30
25
|
read: true,
|
|
31
26
|
write: false,
|
|
32
|
-
desc: {
|
|
33
|
-
en: "Score of the last dart",
|
|
34
|
-
de: "Punktzahl des letzten Dart",
|
|
35
|
-
},
|
|
36
27
|
},
|
|
37
28
|
native: {},
|
|
38
29
|
});
|
|
39
30
|
|
|
40
|
-
await adapter.extendObjectAsync("
|
|
31
|
+
await adapter.extendObjectAsync("trigger.isTriple", {
|
|
41
32
|
type: "state",
|
|
42
33
|
common: {
|
|
43
|
-
name: {
|
|
44
|
-
en: "Triple hit",
|
|
45
|
-
de: "Triple getroffen",
|
|
46
|
-
},
|
|
34
|
+
name: { en: "Triple (trigger from Board)", de: "Triple (Trigger vom Board)" },
|
|
47
35
|
type: "boolean",
|
|
48
36
|
role: "indicator",
|
|
49
37
|
read: true,
|
|
50
38
|
write: false,
|
|
51
|
-
desc: {
|
|
52
|
-
en: "true if the dart hit a triple segment (and passes score range)",
|
|
53
|
-
de: "true, wenn ein Dart ein Triple-Segment getroffen hat (und innerhalb der Punkterange liegt)",
|
|
54
|
-
},
|
|
55
39
|
},
|
|
56
40
|
native: {},
|
|
57
41
|
});
|
|
58
42
|
|
|
59
|
-
await adapter.extendObjectAsync("
|
|
43
|
+
await adapter.extendObjectAsync("trigger.isBullseye", {
|
|
60
44
|
type: "state",
|
|
61
45
|
common: {
|
|
62
|
-
name: {
|
|
63
|
-
en: "Bullseye hit",
|
|
64
|
-
de: "Bullseye getroffen",
|
|
65
|
-
},
|
|
46
|
+
name: { en: "Bullseye (trigger from Board)", de: "Bullseye (Trigger vom Board)" },
|
|
66
47
|
type: "boolean",
|
|
67
48
|
role: "indicator",
|
|
68
49
|
read: true,
|
|
69
50
|
write: false,
|
|
70
|
-
desc: {
|
|
71
|
-
en: "true if the dart hit the bull or bullseye",
|
|
72
|
-
de: "true, wenn ein Dart Bull oder Bullseye getroffen hat",
|
|
73
|
-
},
|
|
74
51
|
},
|
|
75
52
|
native: {},
|
|
76
53
|
});
|
|
77
|
-
|
|
54
|
+
|
|
55
|
+
await adapter.extendObjectAsync("trigger.isMiss", {
|
|
78
56
|
type: "state",
|
|
79
57
|
common: {
|
|
80
|
-
name: {
|
|
81
|
-
en: "Miss",
|
|
82
|
-
de: "Kein Treffer",
|
|
83
|
-
},
|
|
58
|
+
name: { en: "Miss (trigger from Board)", de: "Miss (Trigger vom Board)" },
|
|
84
59
|
type: "boolean",
|
|
85
60
|
role: "indicator",
|
|
86
61
|
read: true,
|
|
87
62
|
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
63
|
},
|
|
93
64
|
native: {},
|
|
94
65
|
});
|
|
95
|
-
|
|
66
|
+
|
|
67
|
+
await adapter.extendObjectAsync("trigger.isDouble", {
|
|
96
68
|
type: "state",
|
|
97
69
|
common: {
|
|
98
|
-
name: {
|
|
99
|
-
en: "Double hit",
|
|
100
|
-
de: "Doppel getroffen",
|
|
101
|
-
},
|
|
70
|
+
name: { en: "Double (trigger from Board)", de: "Doppel (Trigger vom Board)" },
|
|
102
71
|
type: "boolean",
|
|
103
72
|
role: "indicator",
|
|
104
73
|
read: true,
|
|
105
74
|
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
75
|
},
|
|
111
76
|
native: {},
|
|
112
77
|
});
|
|
@@ -115,18 +80,18 @@ async function init(adapter) {
|
|
|
115
80
|
/**
|
|
116
81
|
* Aktualisiert die Throw-States für den letzten Dart inkl. Triple/Bull-Flags.
|
|
117
82
|
*
|
|
118
|
-
* @param {import("@iobroker/adapter-core").AdapterInstance} adapter
|
|
119
|
-
* @param {any} lastDart
|
|
83
|
+
* @param {import("@iobroker/adapter-core").AdapterInstance} adapter
|
|
84
|
+
* @param {any} lastDart
|
|
120
85
|
*/
|
|
121
86
|
async function updateThrow(adapter, lastDart) {
|
|
122
|
-
// @ts-expect-error
|
|
87
|
+
// @ts-expect-error adapter has custom method calcScore
|
|
123
88
|
const score = adapter.calcScore(lastDart);
|
|
124
89
|
const segment = lastDart?.segment?.number || 0;
|
|
125
90
|
|
|
126
91
|
// Score-Range aus Adapter übernehmen
|
|
127
|
-
// @ts-expect-error
|
|
92
|
+
// @ts-expect-error adapter has custom prop tripleMinScoreRuntime
|
|
128
93
|
let minScore = adapter.tripleMinScoreRuntime;
|
|
129
|
-
// @ts-expect-error
|
|
94
|
+
// @ts-expect-error adapter has custom prop tripleMaxScoreRuntime
|
|
130
95
|
let maxScore = adapter.tripleMaxScoreRuntime;
|
|
131
96
|
|
|
132
97
|
if (!Number.isFinite(minScore)) {
|
|
@@ -145,49 +110,46 @@ async function updateThrow(adapter, lastDart) {
|
|
|
145
110
|
const isTriple =
|
|
146
111
|
!!lastDart?.segment && lastDart.segment.multiplier === 3 && segment >= minScore && segment <= maxScore;
|
|
147
112
|
const isDouble = !!lastDart?.segment && lastDart.segment.multiplier === 2;
|
|
148
|
-
|
|
149
113
|
const segName = (lastDart?.segment?.name || "").toUpperCase();
|
|
150
114
|
const isBullseye = segName.includes("BULL") || lastDart?.segment?.number === 25;
|
|
151
115
|
const isMiss = !lastDart?.segment || score === 0;
|
|
152
116
|
|
|
153
117
|
await adapter.setStateAsync("throw.current", { val: score, ack: true });
|
|
154
118
|
|
|
155
|
-
// Timer für Auto-Reset abbrechen
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
clearTimeout(adapter.resetTimer);
|
|
160
|
-
// @ts-expect-error - resetTimer is a custom property in the Autodarts adapter class
|
|
161
|
-
adapter.resetTimer = null;
|
|
119
|
+
// 1. Alten Timer für Auto-Reset abbrechen
|
|
120
|
+
if (adapter.resetTimers["throw"]) {
|
|
121
|
+
clearTimeout(adapter.resetTimers["throw"]);
|
|
122
|
+
delete adapter.resetTimers["throw"];
|
|
162
123
|
}
|
|
163
124
|
|
|
164
|
-
|
|
165
|
-
await adapter.setStateAsync("
|
|
166
|
-
await adapter.setStateAsync("
|
|
167
|
-
await adapter.setStateAsync("
|
|
125
|
+
// 2. States auf die neuen Werte setzen
|
|
126
|
+
await adapter.setStateAsync("trigger.isTriple", { val: isTriple, ack: true });
|
|
127
|
+
await adapter.setStateAsync("trigger.isDouble", { val: isDouble, ack: true });
|
|
128
|
+
await adapter.setStateAsync("trigger.isBullseye", { val: isBullseye, ack: true });
|
|
129
|
+
await adapter.setStateAsync("trigger.isMiss", { val: isMiss, ack: true });
|
|
168
130
|
|
|
169
|
-
//
|
|
131
|
+
// 3. Neuen Reset-Timer setzen
|
|
132
|
+
// @ts-expect-error adapter has custom prop triggerResetSecRuntime
|
|
170
133
|
const timeoutMs = (Number(adapter.triggerResetSecRuntime) || 0) * 1000;
|
|
134
|
+
|
|
171
135
|
if (timeoutMs > 0) {
|
|
172
|
-
adapter.
|
|
136
|
+
adapter.resetTimers["throw"] = setTimeout(() => {
|
|
173
137
|
if (isTriple) {
|
|
174
|
-
adapter.setState("
|
|
138
|
+
adapter.setState("trigger.isTriple", { val: false, ack: true });
|
|
175
139
|
}
|
|
176
140
|
if (isDouble) {
|
|
177
|
-
adapter.setState("
|
|
141
|
+
adapter.setState("trigger.isDouble", { val: false, ack: true });
|
|
178
142
|
}
|
|
179
143
|
if (isBullseye) {
|
|
180
|
-
adapter.setState("
|
|
144
|
+
adapter.setState("trigger.isBullseye", { val: false, ack: true });
|
|
181
145
|
}
|
|
182
146
|
if (isMiss) {
|
|
183
|
-
adapter.setState("
|
|
147
|
+
adapter.setState("trigger.isMiss", { val: false, ack: true });
|
|
184
148
|
}
|
|
185
|
-
|
|
149
|
+
|
|
150
|
+
delete adapter.resetTimers["throw"];
|
|
186
151
|
}, timeoutMs);
|
|
187
152
|
}
|
|
188
153
|
}
|
|
189
154
|
|
|
190
|
-
module.exports = {
|
|
191
|
-
init,
|
|
192
|
-
updateThrow,
|
|
193
|
-
};
|
|
155
|
+
module.exports = { init, updateThrow };
|
package/lib/tools.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// lib/tools.js
|
|
1
2
|
/* eslint-disable jsdoc/require-param-description */
|
|
2
3
|
"use strict";
|
|
3
4
|
|
|
@@ -10,9 +11,12 @@
|
|
|
10
11
|
async function init(adapter) {
|
|
11
12
|
// Initialzustand setzen
|
|
12
13
|
await adapter.setStateAsync("tools.RAW", { val: "", ack: true });
|
|
13
|
-
await adapter.setStateAsync("
|
|
14
|
-
await adapter.setStateAsync("
|
|
15
|
-
await adapter.setStateAsync("
|
|
14
|
+
await adapter.setStateAsync("trigger.isBusted", { val: false, ack: true });
|
|
15
|
+
await adapter.setStateAsync("trigger.isGameon", { val: false, ack: true });
|
|
16
|
+
await adapter.setStateAsync("trigger.isGameshot", { val: false, ack: true });
|
|
17
|
+
await adapter.setStateAsync("trigger.is180", { val: false, ack: true });
|
|
18
|
+
await adapter.setStateAsync("trigger.isMatchshot", { val: false, ack: true });
|
|
19
|
+
await adapter.setStateAsync("trigger.isTakeout", { val: false, ack: true });
|
|
16
20
|
|
|
17
21
|
// Auf Änderungen von tools.RAW hören
|
|
18
22
|
adapter.subscribeStates("tools.RAW");
|
|
@@ -34,17 +38,27 @@ async function handleStateChange(adapter, idShort, state) {
|
|
|
34
38
|
const val = String(state.val || "").toLowerCase();
|
|
35
39
|
const timeoutMs = (adapter.triggerResetSecRuntime || 0) * 1000;
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
/* Alle Trigger zuerst zurücksetzen
|
|
38
42
|
await adapter.setStateAsync("tools.busted", { val: false, ack: true });
|
|
39
43
|
await adapter.setStateAsync("tools.gameon", { val: false, ack: true });
|
|
40
44
|
await adapter.setStateAsync("tools.gameshot", { val: false, ack: true });
|
|
45
|
+
await adapter.setStateAsync("tools.180", { val: false, ack: true });
|
|
46
|
+
await adapter.setStateAsync("tools.matchshot", { val: false, ack: true });
|
|
47
|
+
await adapter.setStateAsync("tools.takeout", { val: false, ack: true });
|
|
48
|
+
*/
|
|
41
49
|
|
|
42
50
|
if (val === "busted") {
|
|
43
|
-
await setPulse(adapter, "
|
|
51
|
+
await setPulse(adapter, "trigger.isBusted", timeoutMs);
|
|
44
52
|
} else if (val === "gameon") {
|
|
45
|
-
await setPulse(adapter, "
|
|
53
|
+
await setPulse(adapter, "trigger.isGameon", timeoutMs);
|
|
46
54
|
} else if (val === "gameshot") {
|
|
47
|
-
await setPulse(adapter, "
|
|
55
|
+
await setPulse(adapter, "trigger.isGameshot", timeoutMs);
|
|
56
|
+
} else if (val === "180") {
|
|
57
|
+
await setPulse(adapter, "trigger.is180", timeoutMs);
|
|
58
|
+
} else if (val === "matchshot") {
|
|
59
|
+
await setPulse(adapter, "trigger.isMatchshot", timeoutMs);
|
|
60
|
+
} else if (val === "takeout") {
|
|
61
|
+
await setPulse(adapter, "trigger.isTakeout", timeoutMs);
|
|
48
62
|
}
|
|
49
63
|
}
|
|
50
64
|
|
|
@@ -58,15 +72,22 @@ async function handleStateChange(adapter, idShort, state) {
|
|
|
58
72
|
* @param {number} timeoutMs
|
|
59
73
|
*/
|
|
60
74
|
async function setPulse(adapter, id, timeoutMs) {
|
|
75
|
+
// Falls das Objekt für die Timer noch nicht existiert, kurz anlegen
|
|
76
|
+
adapter.resetTimers = adapter.resetTimers || {};
|
|
77
|
+
|
|
78
|
+
// 1) Auf true setzen
|
|
61
79
|
await adapter.setStateAsync(id, { val: true, ack: true });
|
|
62
80
|
|
|
63
81
|
if (timeoutMs > 0) {
|
|
64
|
-
|
|
65
|
-
|
|
82
|
+
// 2) Bestehenden Timer NUR für diese ID löschen
|
|
83
|
+
if (adapter.resetTimers[id]) {
|
|
84
|
+
clearTimeout(adapter.resetTimers[id]);
|
|
66
85
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
86
|
+
|
|
87
|
+
// 3) Neuen Timer für diese ID starten
|
|
88
|
+
adapter.resetTimers[id] = setTimeout(async () => {
|
|
89
|
+
await adapter.setStateAsync(id, { val: false, ack: true });
|
|
90
|
+
delete adapter.resetTimers[id]; // Timer-Referenz nach Ablauf aufräumen
|
|
70
91
|
}, timeoutMs);
|
|
71
92
|
}
|
|
72
93
|
}
|
package/main.js
CHANGED
|
@@ -35,6 +35,7 @@ class Autodarts extends utils.Adapter {
|
|
|
35
35
|
// Reset-Timeout + Timer für isTriple/isBullseye/isDouble/isMiss
|
|
36
36
|
this.triggerResetSecRuntime = null;
|
|
37
37
|
this.resetTimer = null;
|
|
38
|
+
this.resetTimers = {}; // NEU: Objekt für individuelle Timer initialisieren
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
async onReady() {
|
|
@@ -73,6 +74,18 @@ class Autodarts extends utils.Adapter {
|
|
|
73
74
|
// Visit-Struktur anlegen (ausgelagert)
|
|
74
75
|
await visit.init(this);
|
|
75
76
|
|
|
77
|
+
// Trigger-Channel für alle is*-Trigger
|
|
78
|
+
await this.extendObjectAsync("trigger", {
|
|
79
|
+
type: "channel",
|
|
80
|
+
common: {
|
|
81
|
+
name: {
|
|
82
|
+
en: "Trigger states",
|
|
83
|
+
de: "Trigger-Zustände",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
native: {},
|
|
87
|
+
});
|
|
88
|
+
|
|
76
89
|
// Throw-Channel und States anlegen (ausgelagert)
|
|
77
90
|
await throwLogic.init(this);
|
|
78
91
|
|
|
@@ -483,12 +496,12 @@ class Autodarts extends utils.Adapter {
|
|
|
483
496
|
native: {},
|
|
484
497
|
});
|
|
485
498
|
|
|
486
|
-
await this.extendObjectAsync("
|
|
499
|
+
await this.extendObjectAsync("trigger.isBusted", {
|
|
487
500
|
type: "state",
|
|
488
501
|
common: {
|
|
489
502
|
name: {
|
|
490
|
-
en: "Busted (trigger)",
|
|
491
|
-
de: "Busted (Trigger)",
|
|
503
|
+
en: "Busted (trigger from tools)",
|
|
504
|
+
de: "Busted (Trigger aus Tools)",
|
|
492
505
|
},
|
|
493
506
|
type: "boolean",
|
|
494
507
|
role: "indicator",
|
|
@@ -498,12 +511,12 @@ class Autodarts extends utils.Adapter {
|
|
|
498
511
|
native: {},
|
|
499
512
|
});
|
|
500
513
|
|
|
501
|
-
await this.extendObjectAsync("
|
|
514
|
+
await this.extendObjectAsync("trigger.isGameon", {
|
|
502
515
|
type: "state",
|
|
503
516
|
common: {
|
|
504
517
|
name: {
|
|
505
|
-
en: "Game on (trigger)",
|
|
506
|
-
de: "Game on (Trigger)",
|
|
518
|
+
en: "Game on (trigger from tools)",
|
|
519
|
+
de: "Game on (Trigger aus Tools)",
|
|
507
520
|
},
|
|
508
521
|
type: "boolean",
|
|
509
522
|
role: "indicator",
|
|
@@ -513,12 +526,12 @@ class Autodarts extends utils.Adapter {
|
|
|
513
526
|
native: {},
|
|
514
527
|
});
|
|
515
528
|
|
|
516
|
-
await this.extendObjectAsync("
|
|
529
|
+
await this.extendObjectAsync("trigger.isGameshot", {
|
|
517
530
|
type: "state",
|
|
518
531
|
common: {
|
|
519
532
|
name: {
|
|
520
|
-
en: "Gameshot (trigger)",
|
|
521
|
-
de: "Gameshot (Trigger)",
|
|
533
|
+
en: "Gameshot (trigger from tools)",
|
|
534
|
+
de: "Gameshot (Trigger aus Tools)",
|
|
522
535
|
},
|
|
523
536
|
type: "boolean",
|
|
524
537
|
role: "indicator",
|
|
@@ -527,14 +540,48 @@ class Autodarts extends utils.Adapter {
|
|
|
527
540
|
},
|
|
528
541
|
native: {},
|
|
529
542
|
});
|
|
530
|
-
|
|
531
|
-
await this.extendObjectAsync("
|
|
532
|
-
type: "
|
|
543
|
+
|
|
544
|
+
await this.extendObjectAsync("trigger.is180", {
|
|
545
|
+
type: "state",
|
|
546
|
+
common: {
|
|
547
|
+
name: {
|
|
548
|
+
en: "180 (trigger from tools)",
|
|
549
|
+
de: "180 (Trigger aus Tools)",
|
|
550
|
+
},
|
|
551
|
+
type: "boolean",
|
|
552
|
+
role: "indicator",
|
|
553
|
+
read: true,
|
|
554
|
+
write: false,
|
|
555
|
+
},
|
|
556
|
+
native: {},
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
await this.extendObjectAsync("trigger.isMatchshot", {
|
|
560
|
+
type: "state",
|
|
533
561
|
common: {
|
|
534
562
|
name: {
|
|
535
|
-
en: "
|
|
536
|
-
de: "Tools
|
|
563
|
+
en: "Matchshot (trigger from tools)",
|
|
564
|
+
de: "Matchshot (Trigger aus Tools)",
|
|
537
565
|
},
|
|
566
|
+
type: "boolean",
|
|
567
|
+
role: "indicator",
|
|
568
|
+
read: true,
|
|
569
|
+
write: false,
|
|
570
|
+
},
|
|
571
|
+
native: {},
|
|
572
|
+
});
|
|
573
|
+
|
|
574
|
+
await this.extendObjectAsync("trigger.isTakeout", {
|
|
575
|
+
type: "state",
|
|
576
|
+
common: {
|
|
577
|
+
name: {
|
|
578
|
+
en: "Takeout (trigger from tools)",
|
|
579
|
+
de: "Takeout (Trigger aus Tools)",
|
|
580
|
+
},
|
|
581
|
+
type: "boolean",
|
|
582
|
+
role: "indicator",
|
|
583
|
+
read: true,
|
|
584
|
+
write: false,
|
|
538
585
|
},
|
|
539
586
|
native: {},
|
|
540
587
|
});
|
|
@@ -584,6 +631,49 @@ class Autodarts extends utils.Adapter {
|
|
|
584
631
|
native: {},
|
|
585
632
|
});
|
|
586
633
|
|
|
634
|
+
await this.extendObjectAsync("tools.config.url180", {
|
|
635
|
+
type: "state",
|
|
636
|
+
common: {
|
|
637
|
+
name: {
|
|
638
|
+
en: "URL for 180",
|
|
639
|
+
de: "URL für 180",
|
|
640
|
+
},
|
|
641
|
+
type: "string",
|
|
642
|
+
role: "text.url",
|
|
643
|
+
read: true,
|
|
644
|
+
write: false,
|
|
645
|
+
},
|
|
646
|
+
native: {},
|
|
647
|
+
});
|
|
648
|
+
await this.extendObjectAsync("tools.config.urlMatchshot", {
|
|
649
|
+
type: "state",
|
|
650
|
+
common: {
|
|
651
|
+
name: {
|
|
652
|
+
en: "URL for Matchshot",
|
|
653
|
+
de: "URL für Matchshot",
|
|
654
|
+
},
|
|
655
|
+
type: "string",
|
|
656
|
+
role: "text.url",
|
|
657
|
+
read: true,
|
|
658
|
+
write: false,
|
|
659
|
+
},
|
|
660
|
+
native: {},
|
|
661
|
+
});
|
|
662
|
+
await this.extendObjectAsync("tools.config.urlTakeout", {
|
|
663
|
+
type: "state",
|
|
664
|
+
common: {
|
|
665
|
+
name: {
|
|
666
|
+
en: "URL for Takeout",
|
|
667
|
+
de: "URL für Takeout",
|
|
668
|
+
},
|
|
669
|
+
type: "string",
|
|
670
|
+
role: "text.url",
|
|
671
|
+
read: true,
|
|
672
|
+
write: false,
|
|
673
|
+
},
|
|
674
|
+
native: {},
|
|
675
|
+
});
|
|
676
|
+
|
|
587
677
|
// Tools-Integration initialisieren
|
|
588
678
|
await tools.init(this);
|
|
589
679
|
|
|
@@ -776,6 +866,9 @@ class Autodarts extends utils.Adapter {
|
|
|
776
866
|
await this.setStateAsync("tools.config.urlBusted", { val: "", ack: true });
|
|
777
867
|
await this.setStateAsync("tools.config.urlGameon", { val: "", ack: true });
|
|
778
868
|
await this.setStateAsync("tools.config.urlGameshot", { val: "", ack: true });
|
|
869
|
+
await this.setStateAsync("tools.config.url180", { val: "", ack: true });
|
|
870
|
+
await this.setStateAsync("tools.config.urlMatchshot", { val: "", ack: true });
|
|
871
|
+
await this.setStateAsync("tools.config.urlTakeout", { val: "", ack: true });
|
|
779
872
|
return;
|
|
780
873
|
}
|
|
781
874
|
|
|
@@ -785,12 +878,20 @@ class Autodarts extends utils.Adapter {
|
|
|
785
878
|
const urlBusted = `${base}/set/${id}.tools.RAW?value=busted`;
|
|
786
879
|
const urlGameon = `${base}/set/${id}.tools.RAW?value=gameon`;
|
|
787
880
|
const urlGameshot = `${base}/set/${id}.tools.RAW?value=gameshot`;
|
|
881
|
+
const url180 = `${base}/set/${id}.tools.RAW?value=180`;
|
|
882
|
+
const urlMatchshot = `${base}/set/${id}.tools.RAW?value=matchshot`;
|
|
883
|
+
const urlTakeout = `${base}/set/${id}.tools.RAW?value=takeout`;
|
|
788
884
|
|
|
789
885
|
await this.setStateAsync("tools.config.urlBusted", { val: urlBusted, ack: true });
|
|
790
886
|
await this.setStateAsync("tools.config.urlGameon", { val: urlGameon, ack: true });
|
|
791
887
|
await this.setStateAsync("tools.config.urlGameshot", { val: urlGameshot, ack: true });
|
|
888
|
+
await this.setStateAsync("tools.config.url180", { val: url180, ack: true });
|
|
889
|
+
await this.setStateAsync("tools.config.urlMatchshot", { val: urlMatchshot, ack: true });
|
|
890
|
+
await this.setStateAsync("tools.config.urlTakeout", { val: urlTakeout, ack: true });
|
|
792
891
|
|
|
793
|
-
this.log.debug(
|
|
892
|
+
this.log.debug(
|
|
893
|
+
`Updated Tools URLs: ${urlBusted}, ${urlGameon}, ${urlGameshot}, ${url180}, ${urlMatchshot}, ${urlTakeout}`,
|
|
894
|
+
);
|
|
794
895
|
}
|
|
795
896
|
|
|
796
897
|
/**
|
|
@@ -999,6 +1100,13 @@ class Autodarts extends utils.Adapter {
|
|
|
999
1100
|
if (this.versionTimer) {
|
|
1000
1101
|
clearInterval(this.versionTimer);
|
|
1001
1102
|
}
|
|
1103
|
+
// NEU: Alle individuellen Tools-Timer löschen
|
|
1104
|
+
if (this.resetTimers) {
|
|
1105
|
+
for (const id in this.resetTimers) {
|
|
1106
|
+
clearTimeout(this.resetTimers[id]);
|
|
1107
|
+
}
|
|
1108
|
+
}
|
|
1109
|
+
// Den alten einzelnen Timer (falls noch genutzt) ebenfalls löschen
|
|
1002
1110
|
if (this.resetTimer) {
|
|
1003
1111
|
clearTimeout(this.resetTimer);
|
|
1004
1112
|
}
|