vsslctrl 0.1.4.dev1__py3-none-any.whl → 0.1.5.dev1__py3-none-any.whl

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.
vsslctrl/api_base.py CHANGED
@@ -158,6 +158,19 @@ class APIBase(ABC):
158
158
 
159
159
  except asyncio.CancelledError:
160
160
  self._log_debug(f"writer close timeout")
161
+ except asyncio.TimeoutError as e:
162
+ self._log_error(f"Timeout while closing connection: {e}")
163
+ # Handle the timeout: log, retry, or take other actions
164
+ except ConnectionResetError as e:
165
+ self._log_error(f"Connection reset by peer: {e}")
166
+ # Handle the error: log, retry, or take other actions
167
+ except Exception as e:
168
+ self._log_error(f"Unexpected error occurred while disconnecting: {e}")
169
+ # Handle unexpected errors
170
+ finally:
171
+ self._writer = None
172
+
173
+ self._reader = None
161
174
 
162
175
  self._log_info(f"{self.host}:{self.port}: disconnected")
163
176
 
@@ -43,12 +43,35 @@ class ZoneIDs(VsslIntEnum):
43
43
  ZONE_6 = 6
44
44
 
45
45
 
46
- """ JSON Structure
47
-
48
- DO NOT CHANGE - VSSL Defined
49
-
50
- {'B1Src': '3', 'B2Src': '4', 'B3Src': '5', 'B1Nm': '', 'B2Nm': 'Optical In', 'dev': 'Device Name', 'ver': 'p15305.016.3701'}
51
-
46
+ """
47
+ JSON Structure
48
+
49
+ DO NOT CHANGE - VSSL Defined
50
+
51
+ A3.x
52
+ {
53
+ "B1Src": "3",
54
+ "B2Src": "4",
55
+ "B3Src": "5",
56
+ "B1Nm": "",
57
+ "B2Nm": "Optical In",
58
+ "dev": "Device Name",
59
+ "ver": "p15305.016.3701"
60
+ }
61
+
62
+ A6.x
63
+ {
64
+ "B1Src": "3",
65
+ "B2Src": "4",
66
+ "B3Src": "5",
67
+ "B4Src": "6",
68
+ "B5Src": "7",
69
+ "B6Src": "8",
70
+ "B1Nm": "",
71
+ "B2Nm": "",
72
+ "dev": "VSSL A.6x",
73
+ "ver": "p15305.017.3701"
74
+ }
52
75
  """
53
76
 
54
77
 
@@ -69,13 +92,50 @@ class DeviceStatusExtKeys:
69
92
  return f"B{zone_id}Src"
70
93
 
71
94
 
72
- """ JSON Structure
73
-
74
- DO NOT CHANGE - VSSL Defined
75
-
76
- {'id': '1', 'ac': '0', 'mc': 'XXXXXXXXXXXX', 'vol': '20', 'mt': '0', 'pa': '0', 'rm': '0', 'ts': '14',
77
- 'alex': '14', 'nmd': '0', 'ird': '14', 'lb': '24', 'tp': '13', 'wr': '0', 'as': '0', 'rg': '0'}
78
-
95
+ """
96
+ JSON Structure
97
+
98
+ DO NOT CHANGE - VSSL Defined
99
+
100
+ A3.x
101
+ {
102
+ "id": "1",
103
+ "ac": "0",
104
+ "mc": "XXXXXXXXXXXX",
105
+ "vol": "20",
106
+ "mt": "0",
107
+ "pa": "0",
108
+ "rm": "0",
109
+ "ts": "14",
110
+ "alex": "14",
111
+ "nmd": "0",
112
+ "ird": "14",
113
+ "lb": "24",
114
+ "tp": "13",
115
+ "wr": "0",
116
+ "as": "0",
117
+ "rg": "0"
118
+ }
119
+
120
+ A6.x
121
+ {
122
+ "id": "1",
123
+ "ac": "0",
124
+ "mc": "XXXXXXXXXXXX",
125
+ "vol": "50",
126
+ "mt": "0",
127
+ "pa": "0",
128
+ "rm": "0",
129
+ "ts": "0",
130
+ "alex": "126",
131
+ "nmd": "0",
132
+ "ird": "255",
133
+ "lb": "17",
134
+ "tp": "16",
135
+ "wr": "0",
136
+ "as": "0",
137
+ "rg": "0"
138
+ }
79
139
  """
80
140
 
81
141
 
@@ -91,13 +151,42 @@ class ZoneStatusExtKeys:
91
151
  DISABLED = "wr"
92
152
 
93
153
 
94
- """ JSON Structure
95
-
96
- DO NOT CHANGE - VSSL Defined
97
-
98
- {'mono': '0', 'AiNm': 'Analog In 1', 'eq1': '100', 'eq2': '100', 'eq3': '100', 'eq4': '100',
99
- 'eq5': '100', 'eq6': '100', 'eq7': '100', 'voll': '75', 'volr': '75', 'vold': '0'}
100
-
154
+ """
155
+ JSON Structure
156
+
157
+ DO NOT CHANGE - VSSL Defined
158
+
159
+ A3.x
160
+ {
161
+ "mono": "0",
162
+ "AiNm": "Analog In 1",
163
+ "eq1": "100",
164
+ "eq2": "100",
165
+ "eq3": "100",
166
+ "eq4": "100",
167
+ "eq5": "100",
168
+ "eq6": "100",
169
+ "eq7": "100",
170
+ "voll": "75",
171
+ "volr": "75",
172
+ "vold": "0"
173
+ }
174
+
175
+ A6.x
176
+ {
177
+ "mono": "0",
178
+ "AiNm": "",
179
+ "eq1": "100",
180
+ "eq2": "100",
181
+ "eq3": "100",
182
+ "eq4": "100",
183
+ "eq5": "100",
184
+ "eq6": "100",
185
+ "eq7": "100",
186
+ "voll": "75",
187
+ "volr": "75",
188
+ "vold": "0"
189
+ }
101
190
  """
102
191
 
103
192
 
@@ -116,13 +205,47 @@ class ZoneEQStatusExtKeys:
116
205
  VOL_DEFAULT_ON = "vold"
117
206
 
118
207
 
119
- """ JSON Structure
120
-
121
- DO NOT CHANGE - VSSL Defined
122
-
123
- {'ECO': '0', 'eqsw': '1', 'inSrc': '0', 'SP': '0', 'BF1': '0', 'BF2': '0', 'BF3': '0',
124
- 'GRM': '0', 'GRS': '255', 'Pwr': '0', 'Bvr': '1', 'fxv': '24', 'AtPwr': '1'}
125
-
208
+ """
209
+ JSON Structure
210
+
211
+ DO NOT CHANGE - VSSL Defined
212
+
213
+ A3.x
214
+ {
215
+ "ECO": "0",
216
+ "eqsw": "1",
217
+ "inSrc": "0",
218
+ "SP": "0",
219
+ "BF1": "0",
220
+ "BF2": "0",
221
+ "BF3": "0",
222
+ "GRM": "0",
223
+ "GRS": "255",
224
+ "Pwr": "0",
225
+ "Bvr": "1",
226
+ "fxv": "24",
227
+ "AtPwr": "1"
228
+ }
229
+
230
+ A6.x
231
+ {
232
+ "ECO": "0",
233
+ "eqsw": "1",
234
+ "inSrc": "0",
235
+ "SP": "0",
236
+ "BF1": "0",
237
+ "BF2": "0",
238
+ "BF3": "0",
239
+ "BF4": "0",
240
+ "BF5": "0",
241
+ "BF6": "0",
242
+ "GRM": "0",
243
+ "GRS": "255",
244
+ "Pwr": "0",
245
+ "Bvr": "2",
246
+ "fxv": "25",
247
+ "AtPwr": "1"
248
+ }
126
249
  """
127
250
 
128
251
 
@@ -142,17 +265,37 @@ class ZoneRouterStatusExtKeys:
142
265
  return f"BF{zone_id}"
143
266
 
144
267
 
145
- """ JSON Structure
146
-
147
- DO NOT CHANGE - VSSL Defined
148
-
149
- {'Album': 'International Skankers', 'Artist': 'Ashkabad', 'BitDepth': 16,
150
- 'BitRate': '320000', 'CoverArtUrl': 'https://i.scdn.co/image/ab67616d0000b2730cbb03a339c6ffd18d10eab2',
151
- 'Current Source': 4, 'Current_time': -1, 'DSDType': '', 'Fav': False, 'FileSize': 0, 'Genre': '',
152
- 'Index': 0, 'Mime': 'Ogg', 'Next': False, 'PlayState': 0, 'PlayUrl': 'spotify:track:0IHTiLO5qBYhf7Hmn0UDBN',
153
- 'Prev': False, 'Repeat': 0, 'SampleRate': '44100', 'Seek': False, 'Shuffle': 0, 'SinglePlay': False,
154
- 'TotalTime': 203087, 'TrackName': 'Beijing'}
155
-
268
+ """
269
+ JSON Structure
270
+
271
+ DO NOT CHANGE - VSSL Defined
272
+
273
+ {
274
+ "Album": "International Skankers",
275
+ "Artist": "Ashkabad",
276
+ "BitDepth": 16,
277
+ "BitRate": "320000",
278
+ "CoverArtUrl": "https://i.scdn.co/image/ab67616d0000b2730cbb03a339c6ffd18d10eab2",
279
+ "Current Source": 4,
280
+ "Current_time": -1,
281
+ "DSDType": "",
282
+ "Fav": False,
283
+ "FileSize": 0,
284
+ "Genre": "",
285
+ "Index": 0,
286
+ "Mime": "Ogg",
287
+ "Next": False,
288
+ "PlayState": 0,
289
+ "PlayUrl": "spotify:track:0IHTiLO5qBYhf7Hmn0UDBN",
290
+ "Prev": False,
291
+ "Repeat": 0,
292
+ "SampleRate": "44100",
293
+ "Seek": False,
294
+ "Shuffle": 0,
295
+ "SinglePlay": False,
296
+ "TotalTime": 203087,
297
+ "TrackName": "Beijing"
298
+ }
156
299
  """
157
300
 
158
301
 
vsslctrl/io.py CHANGED
@@ -139,7 +139,7 @@ class AnalogOutput(ZoneDataClass):
139
139
  self.zone = zone
140
140
 
141
141
  self._is_fixed_volume = False
142
- self._source = self.Sources(zone.id + 3)
142
+ self._source = self.Sources(zone.id + 2)
143
143
 
144
144
  #
145
145
  # Analog Output Fix Volume. Output wont respond to volume control
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vsslctrl
3
- Version: 0.1.4.dev1
3
+ Version: 0.1.5.dev1
4
4
  Summary: Package for controlling VSSL amplifiers
5
5
  Author-email: vsslctrl <vsslcontrolled@proton.me>
6
6
  Classifier: Development Status :: 4 - Beta
@@ -32,6 +32,8 @@ Important
32
32
  -----------
33
33
  Only tested on a VSSL **A.3x** software version **p15305.016.3701**.
34
34
 
35
+ **Notice:** VSSLs new iOS app titled `VSSL`can cause connection refused issues if running at the same time as `vsslctrl`. Best to not use the iOS app togeather. The `VSSL Legacy` app works fine
36
+
35
37
  **Warning:** no *[VSSL Agent](https://vssl.gitbook.io/vssl-rest-api/getting-started/start)* should be running on the same network. If you dont know what this is, then you can probably ignore this notice.
36
38
 
37
39
  ## TODOs
@@ -225,7 +227,7 @@ zone1.transport.state = ZoneTransport.States.PAUSE
225
227
  ## `Zone.track`
226
228
 
227
229
  * Not all sources have complete metadata - missing value will be set to defaults.
228
- * Airplay track position is not avaiable.
230
+ * Airplay track `progress` is not avaiable.
229
231
 
230
232
  | Property | Description | Type | Values |
231
233
  | ---------------------- | ----------- | ----------- |----------- |
@@ -379,7 +381,7 @@ zone1.settings.eq.khz1_db = -2
379
381
 
380
382
  ## Another (Lite) Way
381
383
 
382
- If you perfer to not run the complete intergration, you can send basic HEX commands to the VSSL device using [Netcat](https://nc110.sourceforge.io/) (or ant network tool) on port `50002`.
384
+ If you perfer to not run the complete intergration, you can send basic HEX commands to the VSSL device using [Netcat](https://nc110.sourceforge.io/) (or any network tool) on port `50002`.
383
385
 
384
386
  | HEX | Description |
385
387
  | ---------------------- | ----------- |
@@ -435,6 +437,7 @@ The VSSL API was reverse engineered using Wireshark, VSSLs native "legacy" iOS a
435
437
  * VSSL can not start a stream except for playing a URL directly. This is a limitation of the hardware itself.
436
438
  * Not all sources set the volume to 0 when the zone is muted
437
439
  * Grouping feedback is flaky on the X series amplifiers
440
+ * Airplay `Zone.track.progress` is not avaiable.
438
441
  * Cant stop a URL playback, feedback is worng at least
439
442
  * VSSL likes to cache old track metadata. For example when playing a URL after Spotify, often the device will respond with the previous (Spotify) tracks metadata
440
443
  * `stop()` is intended to disconnect the client and pause the stream. Doesnt always function this way, depending on stream source
@@ -1,23 +1,23 @@
1
1
  vsslctrl/__init__.py,sha256=W7cljoE7L3DukAVr_TEqkxFycYrUbJiqaHrOlbPkmKU,145
2
2
  vsslctrl/api_alpha.py,sha256=wsrwc4owIlRZFJK40evdRDh-iY1ZOxuCjDfsy2xHlt8,33216
3
- vsslctrl/api_base.py,sha256=BpDjKTopnWr9UXTPxOywri_2ndfV7m0MYiFk1nz4514,8998
3
+ vsslctrl/api_base.py,sha256=a80CRtUkYK2OwXQOL8bP-YOvt4YE-ALd-VONza_gjK8,9623
4
4
  vsslctrl/api_bravo.py,sha256=HW-toa38umSpKAij_zxyypsMoU8S_AXpAbBmAaRqgow,12196
5
5
  vsslctrl/core.py,sha256=cMMfrZzSDtIO2J3__EsA6aAWsGVuxSWkfkC8byXpQSY,8823
6
- vsslctrl/data_structure.py,sha256=S9Zp9aGHMztdRII1DTVuD4Spx6z9_AjwHaco9zjQ0OA,6245
6
+ vsslctrl/data_structure.py,sha256=RoOAB4VevWpiNJ-WdW3_s7onHTjLFenSzM2nLaV3vcA,7482
7
7
  vsslctrl/decorators.py,sha256=lG8cYSSA-fNvdcp_90lv58tj50bF6iPoigLKcucWSSI,1707
8
8
  vsslctrl/device.py,sha256=P4sYiibPPFp6iDuF93-OKIsWBL_9vtIxBPDc5uRwvbA,3418
9
9
  vsslctrl/discovery.py,sha256=81uA3rbm-X_CR0Q0LsCQJyCs7638Bb-mgqNZWqV_dq4,5572
10
10
  vsslctrl/event_bus.py,sha256=9liAEJnZfthJwy5O-qc3pDIWRBv5AcV19PjMCwH_niU,5014
11
11
  vsslctrl/exceptions.py,sha256=EEfNlu--9PMIidj3V3ZB8c7p3My8siqKw7YIOjPFaqE,419
12
12
  vsslctrl/group.py,sha256=B7lmJb6DIwXGnMyTKsp-JfRWVCVRFQYzlvS71tutfx4,5368
13
- vsslctrl/io.py,sha256=Tnxk3hKf5G4pGDWvDlgH25DKXnESdX8S-3ecQOuXueU,6048
13
+ vsslctrl/io.py,sha256=crzz5-vsdQfVFBL9a1Btle8mq5zx41SsVSt4N5cWPaE,6048
14
14
  vsslctrl/settings.py,sha256=6zZUf2y-JvmEz6aREMZqxjTptMtVJFO6dGkXdCxR1NU,16587
15
15
  vsslctrl/track.py,sha256=_lQNHYe8ZBm3v1lehFLjZruF5-Rz8PGWuQN-zISBgwc,10136
16
16
  vsslctrl/transport.py,sha256=XJFy0kl9y7hm3YV4_9ElBrq3u6--_k73UKJqKdO6Rqg,6993
17
17
  vsslctrl/utils.py,sha256=CqipPCffDjXCJ00NHAABOI886xRMyvnqkp4tr8i9uhg,1744
18
18
  vsslctrl/zone.py,sha256=5UOgIslYLxEnZ9cjQc5nCgJF1ENlLMsoKcbjORW3hQk,12721
19
- vsslctrl-0.1.4.dev1.dist-info/LICENSE,sha256=67Ekj8PIxjEvkPd7L3GYJ8dyvn1EC4sPM3q3FKtpN6w,1065
20
- vsslctrl-0.1.4.dev1.dist-info/METADATA,sha256=XZq2ZiALLsD7l_D1HHsHZouN_x9ee0DA1BUgkz5AKOo,16311
21
- vsslctrl-0.1.4.dev1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
22
- vsslctrl-0.1.4.dev1.dist-info/top_level.txt,sha256=MRycO_RKageNX27UZ2bLJDMlfeWTQzUZlsd3hS-0u3Y,9
23
- vsslctrl-0.1.4.dev1.dist-info/RECORD,,
19
+ vsslctrl-0.1.5.dev1.dist-info/LICENSE,sha256=67Ekj8PIxjEvkPd7L3GYJ8dyvn1EC4sPM3q3FKtpN6w,1065
20
+ vsslctrl-0.1.5.dev1.dist-info/METADATA,sha256=mB3khdgA1cwsCVMu1nr1L-RyA-38q-SiMOVWcPGzX6o,16557
21
+ vsslctrl-0.1.5.dev1.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
22
+ vsslctrl-0.1.5.dev1.dist-info/top_level.txt,sha256=MRycO_RKageNX27UZ2bLJDMlfeWTQzUZlsd3hS-0u3Y,9
23
+ vsslctrl-0.1.5.dev1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (70.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5