iobroker.squeezeboxrpc 1.5.2 → 1.6.4

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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2019-2024 oweitman <oweitman@gmx.de>
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2019-2026 oweitman <oweitman@gmx.de>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ![Logo](admin/squeezeboxrpc.png)
2
2
 
3
- # ioBroker Logitech Squeezebox Adapter over JSON/RPC-Protocol
3
+ # ioBroker Logitech/Lyrion Squeezebox Adapter over JSON/RPC-Protocol
4
4
 
5
5
  [![NPM version](https://img.shields.io/npm/v/iobroker.squeezeboxrpc.svg)](https://www.npmjs.com/package/iobroker.squeezeboxrpc)
6
6
  [![Downloads](https://img.shields.io/npm/dm/iobroker.squeezeboxrpc.svg)](https://www.npmjs.com/package/iobroker.squeezeboxrpc)
@@ -12,24 +12,19 @@
12
12
  **Tests:** ![Test and Release](https://github.com/oweitman/ioBroker.squeezeboxrpc/workflows/Test%20and%20Release/badge.svg)
13
13
 
14
14
  This is an alternative Adapter that uses the `JSON/RPC`-protocol to get data
15
- and send commands to the Logitech Media Server ([LMS](https://de.wikipedia.org/wiki/Logitech_Media_Server))
15
+ and send commands to the Logitech Media Server/Lyrion Media Server ([LMS](https://de.wikipedia.org/wiki/Lyrion_Music_Server))
16
16
  for controlling connected devices like
17
17
 
18
18
  - native [squeezebox](https://de.wikipedia.org/wiki/Squeezebox),
19
19
  - raspberry pi with additional audio module and small linux based firmwares
20
20
  like [picoreplayer](https://picoreplayer.org/) or [max2play](https://www.max2play.com).
21
+ - WiiM Multiroom Audio ([can talk to an LMS/Lyrion server](https://faq.wiimhome.com/en/support/solutions/articles/72000610226-how-to-stream-music-from-lms-to-your-wiim-device-with-squeezelite))
21
22
  - with plugins chromecast, airplay or `UPnP/DLNA`-Devices
22
23
 
23
24
  The `LMS`-Server can manage/provide very big music collections on harddrives
24
25
  or `NAS`, connect to different streaming providers like `Spotify`, `Deezer`,
25
26
  `Soundcloud`, `shoutcast`, `tunein`, `napster`, `pandora`, `tidal` and more
26
27
 
27
- Why another `Squeezebox` adapter?
28
-
29
- The existing adapter use `telnet` to access the `LMS`. The telnet has some disadvantages.
30
- The actual main web interface of the `LMS` also uses the rpc/json-protocol to get
31
- all needed informations or send commands to the server/players.
32
-
33
28
  ## Features
34
29
 
35
30
  - most of [data](#server) that the `LMS`-Service provides is available in the adapter
@@ -49,7 +44,7 @@ all needed informations or send commands to the server/players.
49
44
 
50
45
  - Install the package
51
46
  - Create an instance
52
- - Configure the Instance with the IP of the logitech media server
47
+ - Configure the Instance with the IP of the logitech/Lyrion media server
53
48
  and the port (normaly 9000)
54
49
  - start/restart the instance
55
50
 
@@ -60,6 +55,16 @@ all needed informations or send commands to the server/players.
60
55
 
61
56
  `iobroker upload squeezeboxrpc`
62
57
 
58
+ ## Trouble Shooting
59
+
60
+ ### SLIMP3 players
61
+
62
+ It has been reported that older SLIMP3 players may be
63
+ unable to connect to the server while the adapter is searching
64
+ for new servers. Disabling the search under
65
+ ´Instance Configuration -> Performance Settings -> Search for other LMS servers´
66
+ should allow the player to connect.
67
+
63
68
  ## Provided states
64
69
 
65
70
  ### Server
@@ -197,7 +202,7 @@ For more information visit the CLI-documentation:
197
202
 
198
203
  ![Player button bar](/widgets/squeezeboxrpc/img/players.png)
199
204
 
200
- All players that are integrated into your Logitech Media Server can be selected\
205
+ All players that are integrated into your Logitech/Lyrion Media Server can be selected\
201
206
  using this widget. After selecting a `squeezerpc.?` instance, the available\
202
207
  players are displayed in the widget.
203
208
 
@@ -227,7 +232,7 @@ players are displayed in the widget.
227
232
  ![Favorites button bar](/widgets/squeezeboxrpc/img/favorites.png)
228
233
 
229
234
  You can use this widget to select all of the favorites that have been\
230
- created in your Logitech Media Server.
235
+ created in your Logitech/Lyrion Media Server.
231
236
  After selecting the Player widget, the available favorites are displayed in the widget.
232
237
 
233
238
  | Group | Attribute | Description |
@@ -440,7 +445,7 @@ you must connect the button to the player widget.
440
445
 
441
446
  ### Playlist
442
447
 
443
- ![Number](/widgets/squeezeboxrpc/img/playlist.png)
448
+ ![Playlist](/widgets/squeezeboxrpc/img/playlist.png)
444
449
 
445
450
  Display the playlist from the server. If you click on an entry the playlist
446
451
  is loaded and the player starts.
@@ -448,19 +453,19 @@ The widged dosent refresh automaticly, you have to press the refreshh button.
448
453
 
449
454
  #### Attributes for Playlist
450
455
 
451
- | Group | Attribute | Description |
452
- | --------------------- | ----------------- | ----------------------------------------------------------------- |
453
- | Player widget | General group | Selection of the player widget. |
456
+ | Group | Attribute | Description |
457
+ | ------------- | ------------- | ------------------------------- |
458
+ | Player widget | General group | Selection of the player widget. |
454
459
 
455
460
  The widget itself has very little formatting.
456
461
  For self formating there are some predefined css-classes:
457
462
 
458
- | CSS-class | description |
459
- | ---------- | ----------------------------------------- |
460
- | plcontainer| Class name assigned to the ul-tag |
461
- | plentry | Class name assigned to the li-tag |
462
- | plrefresh | Class name assigned to the refresh-li tag |
463
- | pltext | Class name assigned to the playlist name |
463
+ | CSS-class | description |
464
+ | ----------- | ----------------------------------------- |
465
+ | plcontainer | Class name assigned to the ul-tag |
466
+ | plentry | Class name assigned to the li-tag |
467
+ | plrefresh | Class name assigned to the refresh-li tag |
468
+ | pltext | Class name assigned to the playlist name |
464
469
 
465
470
  The following CSS for the vis-css tab can serve as an example:
466
471
 
@@ -469,21 +474,21 @@ Dark-mode
469
474
  ```css
470
475
  .plentry {
471
476
  border: 1px #505050 groove;
472
- margin:1px 0px;
473
- padding:5px;
474
- background-color:#202020;
477
+ margin: 1px 0px;
478
+ padding: 5px;
479
+ background-color: #202020;
475
480
  }
476
481
  .plrefresh {
477
- padding:5px;
482
+ padding: 5px;
478
483
  }
479
484
  .plentry:hover {
480
- background-color:#404040;
485
+ background-color: #404040;
481
486
  }
482
487
  .plrefresh svg {
483
- color:#cccccc;
488
+ color: #cccccc;
484
489
  }
485
490
  .plrefresh svg:hover {
486
- color:#ffffff;
491
+ color: #ffffff;
487
492
  filter: drop-shadow(0px 0px 1px #87ceeb);
488
493
  }
489
494
  ```
@@ -493,25 +498,79 @@ Light-mode
493
498
  ```css
494
499
  .plentry {
495
500
  border: 1px #b0b0b0 groove;
496
- margin:1px 0px;
497
- padding:5px;
498
- background-color:#c0c0c0;
501
+ margin: 1px 0px;
502
+ padding: 5px;
503
+ background-color: #c0c0c0;
499
504
  }
500
505
  .plrefresh {
501
- padding:5px;
506
+ padding: 5px;
502
507
  }
503
508
  .plentry:hover {
504
- background-color:#e0e0e0;
509
+ background-color: #e0e0e0;
505
510
  }
506
511
  .plrefresh svg {
507
- color:#444444;
512
+ color: #444444;
508
513
  }
509
514
  .plrefresh svg:hover {
510
- color:#000000;
515
+ color: #000000;
511
516
  filter: drop-shadow(0px 0px 1px #87ceeb);
512
517
  }
513
518
  ```
514
519
 
520
+ ### Browser
521
+
522
+ ![Browser](/widgets/squeezeboxrpc/img/browser.png)
523
+
524
+ Displays music, albums, artists, radio stations, apps, etc. from the server.
525
+ Click on an item to navigate deeper into the hierarchy. The available commands
526
+ are displayed with additional buttons.
527
+ You can go up one level by clicking on the path displayed at the top.
528
+
529
+ #### Attributes for Browser
530
+
531
+ | Group | Attribute | Description |
532
+ | --------------------- | ------------- | ------------------------------------------------------------------- |
533
+ | Player widget | General group | Selection of the player widget. |
534
+ | debug | General group | Enable extra debugging (function reference) in the browser console. |
535
+ | debugwithfetchresults | General group | Enable extra debugging (object reference) in the browser console. |
536
+
537
+ The widget itself has very some formatting.
538
+ For self formating there are some predefined css-classes:
539
+
540
+ | CSS-class | description |
541
+ | ------------------------------------------ | ------------------------------------- |
542
+ | sqbrowser-list-container | container for the widget |
543
+ | sqbrowser-parent-directory | element to show the parent directory |
544
+ | sqbrowser-btn-svg | Class for all svg buttons |
545
+ | sqbrowser-btn-svg-menu | Class for svg menus |
546
+ | sqbrowser-scrollable-area | Class for scroll container |
547
+ | sqbrowser-list-item | Class for single item |
548
+ | sqbrowser-list-item-content | Class for item title |
549
+ | sqbrowser-button-group | Class for button group in a list item |
550
+ | sqbrowser-btn-svg sqbrowser-btn-svg-action | Class for action button |
551
+
552
+ **Note about alpha state of this widget:**
553
+
554
+ - Implementing LMS/Lyrion for browsing is hell.
555
+ - The technical model for this widget is the "Material" theme plugin
556
+ in the LMS/Lyrion server.
557
+ - Not all features are currently implemented.
558
+ - All input field types are not yet available.
559
+ - Not all item types may have been implemented.
560
+ - Optional, extensive debug output has been added for analysis (see also attributes).
561
+ - Output of the function reference: All function names are output in
562
+ order in the browser console.
563
+ - Output of the data reference: All data requested and returned
564
+ by the server is output.
565
+
566
+ If testers encounter errors/problems or missing implementations,
567
+ please provide as detailed a description as possible:
568
+
569
+ - Where does the data come from in the LMS/Lyrion
570
+ (already built-in service/additionally installed plugin)
571
+ - What steps/clicks were performed to create the problem
572
+ - What are the function references and data references?
573
+
515
574
  ## SendTo-Befehle
516
575
 
517
576
  ### cmdGeneral
@@ -524,11 +583,11 @@ Example:
524
583
 
525
584
  ```js
526
585
  async function main() {
527
- let data = await sendToAsync("squeezeboxrpc.0", "cmdGeneral", {
528
- playerid: "",
529
- cmdArray: ["playlists", "0", "999", "tags:us"],
530
- });
531
- console.log(JSON.stringify(data));
586
+ let data = await sendToAsync('squeezeboxrpc.0', 'cmdGeneral', {
587
+ playerid: '',
588
+ cmdArray: ['playlists', '0', '999', 'tags:us'],
589
+ });
590
+ console.log(JSON.stringify(data));
532
591
  }
533
592
  main();
534
593
  ```
@@ -539,11 +598,11 @@ This command is used internally by the adapter to load the favorites.
539
598
 
540
599
  ```js
541
600
  async function main() {
542
- let data = await sendToAsync("squeezeboxrpc.0", "cmdGeneral", {
543
- playerid: "",
544
- cmdArray: ["favorites", "items", "0", "999", "want_url:1", "item_id:"],
545
- });
546
- console.log(JSON.stringify(data));
601
+ let data = await sendToAsync('squeezeboxrpc.0', 'cmdGeneral', {
602
+ playerid: '',
603
+ cmdArray: ['favorites', 'items', '0', '999', 'want_url:1', 'item_id:'],
604
+ });
605
+ console.log(JSON.stringify(data));
547
606
  }
548
607
  main();
549
608
  ```
@@ -581,6 +640,25 @@ are contained in the following CLI documentation:
581
640
  ### **WORK IN PROGRESS**
582
641
 
583
642
  -->
643
+ ### 1.6.4 (2026-03-25)
644
+
645
+ - test remove node 18,extend to node 24
646
+ - update packages
647
+
648
+ ### 1.6.2 (2025-05-05)
649
+
650
+ - fix node version in github workflow
651
+
652
+ ### 1.6.1 (2025-05-05)
653
+
654
+ - Fix eslint
655
+
656
+ ### 1.6.0 (2025-05-05)
657
+
658
+ - upgrade dependency js-controller
659
+ - new widget, but only alpha version for testing and improvement
660
+ - fix issues of adapter checker
661
+
584
662
  ### 1.5.2 (2024-12-16)
585
663
 
586
664
  - fix spelling of iobroker upload squeezeboxrpc in readme
@@ -919,4 +997,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
919
997
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
920
998
  SOFTWARE.
921
999
 
922
- Copyright (c) 2019-2024 oweitman
1000
+ Copyright (c) 2019-2026 oweitman
package/io-package.json CHANGED
@@ -1,8 +1,47 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "squeezeboxrpc",
4
- "version": "1.5.2",
4
+ "version": "1.6.4",
5
5
  "news": {
6
+ "1.6.4": {
7
+ "en": "test remove node 18,extend to node 24\nupdate packages",
8
+ "de": "test entfernen node 18,extend to node 24\nupdate-pakete",
9
+ "ru": "тест удалить узел 18, расширить узел 24\nобновление пакетов",
10
+ "pt": "teste remover o nó 18, extend ao nó 24\natualizar pacotes",
11
+ "nl": "test verwijder node 18, extend naar node 24\npakketten bijwerken",
12
+ "fr": "test enlever le noeud 18,extendre au noeud 24\nmettre à jour les paquets",
13
+ "it": "prova rimuovere nodo 18, estend to node 24\npacchetti di aggiornamento",
14
+ "es": "prueba eliminar nodo 18,extender a nodo 24\nactualizar paquetes",
15
+ "pl": "test usunąć węzeł 18, rozszerzyć na węzeł 24\naktualizacja pakietów",
16
+ "uk": "test remove node 18,потенд в вузол 24\nоновлення пакетів",
17
+ "zh-cn": "测试去除节点 18, 延伸至节点 24\n更新软件包"
18
+ },
19
+ "1.6.3": {
20
+ "en": "test remove node 18,extend to node 24\nupdate packages",
21
+ "de": "test entfernen node 18,extend to node 24\nupdate-pakete",
22
+ "ru": "тест удалить узел 18, расширить узел 24\nобновление пакетов",
23
+ "pt": "teste remover o nó 18, extend ao nó 24\natualizar pacotes",
24
+ "nl": "test verwijder node 18, extend naar node 24\npakketten bijwerken",
25
+ "fr": "test enlever le noeud 18,extendre au noeud 24\nmettre à jour les paquets",
26
+ "it": "prova rimuovere nodo 18, estend to node 24\npacchetti di aggiornamento",
27
+ "es": "prueba eliminar nodo 18,extender a nodo 24\nactualizar paquetes",
28
+ "pl": "test usunąć węzeł 18, rozszerzyć na węzeł 24\naktualizacja pakietów",
29
+ "uk": "test remove node 18,потенд в вузол 24\nоновлення пакетів",
30
+ "zh-cn": "测试去除节点 18, 延伸至节点 24\n更新软件包"
31
+ },
32
+ "1.6.2": {
33
+ "en": "upgrade dependency js-controller\nnew widget, but only alpha version for testing and improvement\nfix issues of adapter checker",
34
+ "de": "upgrade abhängigkeit js-controller\nneue widget, aber nur alpha-version für tests und verbesserung\nprobleme des adapter-checkers beheben",
35
+ "ru": "обновление зависимостей js-контроллера\nновый виджет, но только альфа-версия для тестирования и улучшения\nустранение проблем с проверкой адаптера",
36
+ "pt": "upgrade de dependência js-controller\nnovo widget, mas apenas versão alfa para testes e melhoria\ncorrigir problemas do verificador do adaptador",
37
+ "nl": "upgrade afhankelijkheid js-controller\nnieuw widget, maar alleen alfa versie voor testen en verbetering\nproblemen van adaptercontrole oplossen",
38
+ "fr": "upgrade dépendance js-controller\nnouveau widget, mais seulement version alpha pour tester et améliorer\nrésoudre les problèmes de vérification de l'adaptateur",
39
+ "it": "potenziare la dipendenza js-controller\nnuovo widget, ma solo versione alfa per test e miglioramento\nrisolvere problemi di adattatore checker",
40
+ "es": "actualización dependencia js-controller\nnuevo widget, pero sólo versión alfa para pruebas y mejoras\nsolucionar problemas de control de adaptador",
41
+ "pl": "upgrade independent js- controller\nnowy widget, ale tylko wersja alfa do testowania i doskonalenia\nnaprawić problemy z sprawdzaniem adaptera",
42
+ "uk": "оновлення залежності js-controller\nновий віджет, але тільки альфа-версія для тестування та вдосконалення\nвиправити питання перевірки адаптера",
43
+ "zh-cn": "升级依赖性js控制器\n新部件, 但只用于测试和改进的 alpha 版本\n适配器检查器的固定问题"
44
+ },
6
45
  "1.5.2": {
7
46
  "en": "fix spelling of iobroker upload squeezeboxrpc in readme\nfix playtime bar",
8
47
  "de": "fix buchstabierung von iobroker laden pressboxrpc in readme\nspielzeitleiste",
@@ -54,19 +93,6 @@
54
93
  "pl": "naprawić kilka brakujących błędów obiektów\nsanitize więcej nazw graczy w zespołach\ndodaj polecenie sendTo \"cmdGeneral\"\nsanitize more the playername\npoprawić tłumaczenie\njeśli trackartist jest użyteczny, napisz do artysty jeśli pusty\npoprawa obsługi grafiki _ url\nprzenieść dokumentację widget z html do markdown\ndopasowanie odpowiadającego stylu karty\npoprawić widżety atrybutów\nzmienić obsługę TPE2 jeszcze raz\njsonConfig dodać opcje rozmiaru dla różnej wielkości ekranu\ntestowa realizacja obsługi TPE2. przełączanie w ustawieniach\nadd datapoints album _ artist, track _ artist, artistOriginal",
55
94
  "uk": "виправити деякі помилки відсутніх об'єктів\nдезінфікувати більше назв гравців у синкгрупах\nдодати команду \"Команда\"\nсатизувати більше ім'я гравця\nполіпшення перекладу\nякщо трактист - аваїл, то напишіть художника, якщо порожня\nпокращити роботу для арт-роботи_url\nперемістити документацію віджету з html для розмітки\nрегулюйте чуйний стиль вкладки\nполіпшення віджетів атрибутів\nзміна обробки TPE2 ще раз\njsonConfig add sizing options для різних розмірів екрана\nтестування впровадження TPE2 обробки. Перемикач в налаштуваннях\nдодавати альбоми/артист, трек_artist, художникOriginal",
56
95
  "zh-cn": "修正一些缺失的对象错误\n在同步组中消毒更多玩家名\n添加发送到命令“ cmdGeneral ”\n更多消毒玩家名称\n改进翻译\n如果 trackartist 有用, 如果空则写给艺人\n改进对艺术品的处理_ url\n将部件文档从 html 移动到下标记\n调整响应标签样式\n改进属性部件\n再次更改TPE2处理\njsonConfig 添加不同屏幕大小的大小选项\n试验实施TPE2处理。 在设置中切换\n添加数据点相册_艺人,音轨_艺人,艺人"
57
- },
58
- "1.3.17": {
59
- "en": "add edit button to the vie index field of favorites widget",
60
- "de": "fügen sie edit-taste in das vie-index-feld der favoriten widget",
61
- "ru": "добавить редактирующую кнопку в поле индекса vie",
62
- "pt": "adicionar botão de edição para o campo de índice vie de widget favorito",
63
- "nl": "bewerken knop toevoegen aan het vie index veld van favorieten widget",
64
- "fr": "ajouter le bouton d'édition au champ d'index de vie des favoris widget",
65
- "it": "aggiungere il pulsante di modifica al campo indice vie di widget preferiti",
66
- "es": "añadir botón de edición al campo índice vie de favoritos widget",
67
- "pl": "dodaj przycisk edycji do pola indeksu vie ulubionych widget",
68
- "uk": "додати кнопку редагування в vie index поле улюблених віджетів",
69
- "zh-cn": "在最爱部件的vie索引字段中添加编辑按钮"
70
96
  }
71
97
  },
72
98
  "titleLang": {
@@ -116,7 +142,8 @@
116
142
  "loglevel": "info",
117
143
  "tier": 3,
118
144
  "restartAdapters": [
119
- "vis"
145
+ "vis",
146
+ "vis-2"
120
147
  ],
121
148
  "mode": "daemon",
122
149
  "type": "multimedia",
@@ -129,12 +156,12 @@
129
156
  },
130
157
  "dependencies": [
131
158
  {
132
- "js-controller": ">=5.0.19"
159
+ "js-controller": ">=6.0.12"
133
160
  }
134
161
  ],
135
162
  "globalDependencies": [
136
163
  {
137
- "admin": ">=5.1.13"
164
+ "admin": ">=7.6.17"
138
165
  }
139
166
  ]
140
167
  },
package/lib/ioUtil.js CHANGED
@@ -169,20 +169,6 @@ class ioUtil {
169
169
  const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + id;
170
170
  this.adapter.getState(name, callback);
171
171
  }
172
- /**
173
- * Creates a state object in the ioBroker system.
174
- *
175
- * @param stateTemplate - The template containing the common properties of the state.
176
- * @param level1path - The first level path to prepend to the state name, can be null or empty.
177
- * @param level2path - The second level path to prepend to the state name, can be null or empty.
178
- * @param callback - Optional callback function, called when the state is created.
179
- */
180
- createState(stateTemplate, level1path = false, level2path = false, callback) {
181
- this.logdebug(`createState ${stateTemplate.name}`);
182
- const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
183
- this.logdebug(`Create Key ${name}`);
184
- this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate, callback);
185
- }
186
172
  /**
187
173
  * Sets the state of an object in the ioBroker system.
188
174
  *
package/lib/iosbplayer.js CHANGED
@@ -46,7 +46,6 @@ const { ioUtil } = require('./ioUtil');
46
46
  * - createArtworkUrl: Generates a URL for player artwork.
47
47
  * - disconnect: Handles player disconnection.
48
48
  * - connect: Handles player connection.
49
- * - createState: Creates a state object for the player.
50
49
  * - createObject: Creates a device or state object.
51
50
  * - request: Sends a request to the server.
52
51
  * - setTPE2Handling: Sets the TPE2 handling mode.
@@ -1052,23 +1051,6 @@ function ioSBPlayer(server, playerdata) {
1052
1051
  this.doObserverPlayer();
1053
1052
  this.connected = 1;
1054
1053
  };
1055
- /**
1056
- * Creates a state object for the player if it does not already exist.
1057
- *
1058
- * @param stateTemplate - The template containing the common properties of the state.
1059
- * @param [level1path] - The first level path to prepend to the state name, can be false or empty.
1060
- * @param [level2path] - The second level path to prepend to the state name, can be false or empty.
1061
- * @returns The state template with an 'exist' property set to true.
1062
- */
1063
- this.createState = function (stateTemplate, level1path = false, level2path = false) {
1064
- const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
1065
- this.ioUtil.logsilly(`Create state ${name}`);
1066
- if (!this.currentStates[name]) {
1067
- this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate);
1068
- }
1069
- stateTemplate.exist = true;
1070
- return stateTemplate;
1071
- };
1072
1054
  /**
1073
1055
  * Creates a state object in the ioBroker system if it does not already exist.
1074
1056
  *
package/lib/iosbserver.js CHANGED
@@ -1231,13 +1231,6 @@ function IoSbServer(adapter) {
1231
1231
  stateTemplate.exist = true;
1232
1232
  return stateTemplate;
1233
1233
  };
1234
- this.createState = function (stateTemplate, level1path = false, level2path = false, callback) {
1235
- const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
1236
- this.ioUtil.logsilly(`Create state ${name}`);
1237
- this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate, callback);
1238
- stateTemplate.exist = true;
1239
- return stateTemplate;
1240
- };
1241
1234
  this.createFolder = async function (foldername, level1path, level2path) {
1242
1235
  const id = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + foldername;
1243
1236
  this.ioUtil.logsilly(`createFolder ${id}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.squeezeboxrpc",
3
- "version": "1.5.2",
3
+ "version": "1.6.4",
4
4
  "description": "ioBroker Logitech Squeezebox Adapter over JSON/RPC-Protocol",
5
5
  "author": {
6
6
  "name": "oweitman",
@@ -20,39 +20,28 @@
20
20
  "url": "https://github.com/oweitman/ioBroker.squeezeboxrpc"
21
21
  },
22
22
  "engines": {
23
- "node": ">= 18"
23
+ "node": ">= 20"
24
24
  },
25
25
  "dependencies": {
26
- "@iobroker/adapter-core": "^3.2.2",
27
- "jayson": "^4.1.2",
28
- "lodash": "^4.17.4",
29
- "request": "^2.88.0",
26
+ "@iobroker/adapter-core": "^3.3.2",
27
+ "jayson": "^4.3.0",
28
+ "lodash": "^4.17.23",
30
29
  "super": "^0.2.3"
31
30
  },
32
31
  "devDependencies": {
33
- "@alcalzone/release-script": "^3.8.0",
34
- "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
35
- "@alcalzone/release-script-plugin-license": "^3.7.0",
36
- "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
37
- "@iobroker/adapter-dev": "^1.3.0",
38
- "@iobroker/eslint-config": "^1.0.0",
39
- "@iobroker/testing": "^5.0.0",
40
- "@tsconfig/node18": "^18.2.4",
41
- "@types/chai": "^4.3.16",
42
- "@types/chai-as-promised": "^8.0.0",
43
- "@types/mocha": "^10.0.9",
44
- "@types/node": "^22.8.6",
32
+ "@alcalzone/release-script": "^5.1.1",
33
+ "@alcalzone/release-script-plugin-iobroker": "^5.1.2",
34
+ "@alcalzone/release-script-plugin-license": "^5.1.1",
35
+ "@alcalzone/release-script-plugin-manual-review": "^5.1.1",
36
+ "@iobroker/adapter-dev": "^1.5.0",
37
+ "@iobroker/eslint-config": "^2.2.0",
38
+ "@iobroker/testing": "^5.2.2",
39
+ "@tsconfig/node18": "^18.2.6",
40
+ "@types/node": "^25.5.0",
45
41
  "@types/proxyquire": "^1.3.31",
46
- "@types/sinon": "^17.0.3",
47
- "@types/sinon-chai": "^3.2.12",
48
- "axios": "^1.7.7",
49
- "chai": "^4.4.1",
50
- "chai-as-promised": "^8.0.0",
51
- "mocha": "^10.8.2",
42
+ "npm-watch": "^0.13.0",
52
43
  "proxyquire": "^2.1.3",
53
- "sinon": "^19.0.2",
54
- "sinon-chai": "^3.7.0",
55
- "typescript": "~5.6.3"
44
+ "typescript": "~5.9.3"
56
45
  },
57
46
  "main": "squeezeboxrpc.js",
58
47
  "files": [
@@ -70,11 +59,12 @@
70
59
  "test:js": "mocha --config test/mocharc.custom.json \"{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js}\"",
71
60
  "test:package": "mocha test/package --exit",
72
61
  "test:integration": "mocha test/integration --exit",
73
- "test": "npm run test:js && npm run test:package",
62
+ "test": "npm run test:integration && npm run test:package",
74
63
  "check": "tsc --noEmit -p tsconfig.check.json",
75
- "lint": "eslint -c eslint.config.mjs .",
64
+ "lint": "eslint -c eslint.config.mjs . ",
65
+ "npm": "npm i && cd widgets && npm i",
76
66
  "build": "cd widgets/squeezeboxrpc && npm run build && cd ../..",
77
- "repochecker": "npx github:oweitman/ioBroker.repochecker https://github.com/oweitman/ioBroker.squeezeboxrpc --local",
67
+ "repochecker": "npx github:oweitman/ioBroker.repochecker https://github.com/oweitman/ioBroker.squeezeboxrpc --local --noinfo",
78
68
  "translate": "translate-adapter",
79
69
  "translate-widgets": "node ./bin/translate.js --source widgets/squeezeboxrpc/i18n/en.json --format single",
80
70
  "release": "release-script --all"
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "squeezeboxrpc-vis1-widget",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "squeezeboxrpc-vis1-widget",
9
+ "version": "1.0.0",
10
+ "license": "MIT"
11
+ }
12
+ }
13
+ }
@@ -2,9 +2,13 @@
2
2
  "name": "squeezeboxrpc-vis1-widget",
3
3
  "version": "1.0.0",
4
4
  "main": "squeezeboxrpc/js/squeezeboxrpc.js",
5
+ "watch": {
6
+ "build": "squeezeboxrpc/**/js/*.js"
7
+ },
5
8
  "scripts": {
6
9
  "test": "echo \"Error: no test specified\" && exit 1",
7
- "build": "esbuild squeezeboxrpc/js/bundle.js --bundle --outfile=squeezeboxrpc/js/squeezeboxrpc-dist.js --target=es6 --sourcemap",
10
+ "watch": "npm-watch",
11
+ "build": "esbuild squeezeboxrpc/js/bundle.js --bundle --outfile=squeezeboxrpc/build/squeezeboxrpc-dist.js --target=es6 --sourcemap",
8
12
  "buildxx": "esbuild squeezeboxrpc/js/bundle.js --minify --bundle --outfile=squeezeboxrpc/js/squeezeboxrpc-dist.js --target=es6 --sourcemap"
9
13
  },
10
14
  "author": "",