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 +13 -0
- vsslctrl/data_structure.py +181 -38
- vsslctrl/io.py +1 -1
- {vsslctrl-0.1.4.dev1.dist-info → vsslctrl-0.1.5.dev1.dist-info}/METADATA +6 -3
- {vsslctrl-0.1.4.dev1.dist-info → vsslctrl-0.1.5.dev1.dist-info}/RECORD +8 -8
- {vsslctrl-0.1.4.dev1.dist-info → vsslctrl-0.1.5.dev1.dist-info}/WHEEL +1 -1
- {vsslctrl-0.1.4.dev1.dist-info → vsslctrl-0.1.5.dev1.dist-info}/LICENSE +0 -0
- {vsslctrl-0.1.4.dev1.dist-info → vsslctrl-0.1.5.dev1.dist-info}/top_level.txt +0 -0
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
|
|
vsslctrl/data_structure.py
CHANGED
|
@@ -43,12 +43,35 @@ class ZoneIDs(VsslIntEnum):
|
|
|
43
43
|
ZONE_6 = 6
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
"""
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
"""
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
"""
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
"""
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
"""
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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 +
|
|
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.
|
|
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
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
20
|
-
vsslctrl-0.1.
|
|
21
|
-
vsslctrl-0.1.
|
|
22
|
-
vsslctrl-0.1.
|
|
23
|
-
vsslctrl-0.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|