tsvesync 1.6.1 → 1.7.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 CHANGED
@@ -142,7 +142,11 @@ A TypeScript library for interacting with VeSync smart home devices. This librar
142
142
 
143
143
  ### Smart Tower Fan
144
144
  - LTF-F422S Series
145
- - Features: Fan speed control
145
+ - Features: Power, all 12 speeds, oscillation, binary display, mute, countdown timer, and temperature
146
+ - Models: LTF-F422S-KEU, LTF-F422S-WUS, LTF-F422S-WUSR, LTF-F422S-WJP (legacy LTF-F422_WJP alias retained)
147
+ - `temperature` retains the raw Fahrenheit-times-ten API value; `temperatureCelsius` provides Celsius, or `undefined` before a valid reading
148
+ - `displayEnabled` and `oscillationEnabled` report configured switches; `displayState` and `oscillationState` report physical status
149
+ - `setTimer(hours)` uses hours (up to 12), scheduling off while on or on while off; `timerRemaining` reports seconds and `clearTimer()` recovers the timer ID when necessary
146
150
  - Modes: Normal, Auto, Advanced Sleep, Turbo
147
151
  - Fan speeds: 1-12
148
152
 
@@ -296,3 +300,7 @@ MIT
296
300
  ## Acknowledgments
297
301
 
298
302
  This project is inspired by the PyVeSync Python library and aims to provide similar functionality for TypeScript/JavaScript developers.
303
+
304
+ ### Tower fan API reference and validation
305
+
306
+ The LTF-F422S command contracts follow [pyvesync's tower-fan implementation](https://github.com/webdjoe/pyvesync/blob/0b657bd03e5cb8a1d393fc97aa874fe9069f8ab9/src/pyvesync/devices/vesyncfan.py). Temperature conversion follows [fanctl's device implementation](https://github.com/ardacelep/fanctl/blob/main/fanctl/backend/vesync.py), which identifies this field as Fahrenheit times ten. Run `npm run test:tower-fan` for offline request and state checks. These checks do not establish physical operation on every fan firmware; issue #5 contributors should confirm on their hardware.
@@ -1,165 +1,209 @@
1
- change_fan_speed:
2
- headers:
3
- Content-Type: application/json; charset=UTF-8
4
- User-Agent: okhttp/3.12.1
1
+ # Tower fan request contracts, aligned with pyvesync devices/vesyncfan.py.
2
+ # Authentication headers and metadata are supplied by Helpers at runtime.
3
+ update:
4
+ method: post
5
+ url: /cloud/v2/deviceManaged/bypassV2
5
6
  json_object:
6
- acceptLanguage: en
7
- accountID: sample_id
8
- appVersion: 2.8.6
7
+ method: bypassV2
9
8
  cid: LTF-F422S-KEU-CID
10
- configModel: ConfigModule
11
9
  configModule: ConfigModule
12
- debugMode: false
13
- deviceId: LTF-F422S-KEU-CID
14
- deviceRegion: US
10
+ payload:
11
+ method: getTowerFanStatus
12
+ source: APP
13
+ data: {}
14
+ turn_on:
15
+ method: post
16
+ url: /cloud/v2/deviceManaged/bypassV2
17
+ json_object:
15
18
  method: bypassV2
19
+ cid: LTF-F422S-KEU-CID
20
+ configModule: ConfigModule
16
21
  payload:
22
+ method: setSwitch
23
+ source: APP
24
+ data:
25
+ powerSwitch: 1
26
+ switchIdx: 0
27
+ turn_off:
28
+ method: post
29
+ url: /cloud/v2/deviceManaged/bypassV2
30
+ json_object:
31
+ method: bypassV2
32
+ cid: LTF-F422S-KEU-CID
33
+ configModule: ConfigModule
34
+ payload:
35
+ method: setSwitch
36
+ source: APP
37
+ data:
38
+ powerSwitch: 0
39
+ switchIdx: 0
40
+ change_fan_speed:
41
+ method: post
42
+ url: /cloud/v2/deviceManaged/bypassV2
43
+ json_object:
44
+ method: bypassV2
45
+ cid: LTF-F422S-KEU-CID
46
+ configModule: ConfigModule
47
+ payload:
48
+ method: setLevel
49
+ source: APP
17
50
  data:
18
51
  levelIdx: 0
19
52
  levelType: wind
20
53
  manualSpeedLevel: 3
21
- method: setLevel
22
- source: APP
23
- phoneBrand: SM N9005
24
- phoneOS: Android
25
- timeZone: America/New_York
26
- token: sample_tk
27
- traceId: TRACE_ID
54
+ manual_mode:
28
55
  method: post
29
56
  url: /cloud/v2/deviceManaged/bypassV2
30
- manual_mode:
31
- headers:
32
- Content-Type: application/json; charset=UTF-8
33
- User-Agent: okhttp/3.12.1
34
57
  json_object:
35
- acceptLanguage: en
36
- accountID: sample_id
37
- appVersion: 2.8.6
58
+ method: bypassV2
38
59
  cid: LTF-F422S-KEU-CID
39
- configModel: ConfigModule
40
60
  configModule: ConfigModule
41
- debugMode: false
42
- deviceId: LTF-F422S-KEU-CID
43
- deviceRegion: US
44
- method: bypassV2
45
61
  payload:
62
+ method: setTowerFanMode
63
+ source: APP
46
64
  data:
47
65
  workMode: normal
66
+ auto_mode:
67
+ method: post
68
+ url: /cloud/v2/deviceManaged/bypassV2
69
+ json_object:
70
+ method: bypassV2
71
+ cid: LTF-F422S-KEU-CID
72
+ configModule: ConfigModule
73
+ payload:
48
74
  method: setTowerFanMode
49
75
  source: APP
50
- phoneBrand: SM N9005
51
- phoneOS: Android
52
- timeZone: America/New_York
53
- token: sample_tk
54
- traceId: TRACE_ID
76
+ data:
77
+ workMode: auto
78
+ sleep_mode:
55
79
  method: post
56
80
  url: /cloud/v2/deviceManaged/bypassV2
57
- sleep_mode:
58
- headers:
59
- Content-Type: application/json; charset=UTF-8
60
- User-Agent: okhttp/3.12.1
61
81
  json_object:
62
- acceptLanguage: en
63
- accountID: sample_id
64
- appVersion: 2.8.6
82
+ method: bypassV2
65
83
  cid: LTF-F422S-KEU-CID
66
- configModel: ConfigModule
67
84
  configModule: ConfigModule
68
- debugMode: false
69
- deviceId: LTF-F422S-KEU-CID
70
- deviceRegion: US
71
- method: bypassV2
72
85
  payload:
86
+ method: setTowerFanMode
87
+ source: APP
73
88
  data:
74
89
  workMode: advancedSleep
90
+ turbo_mode:
91
+ method: post
92
+ url: /cloud/v2/deviceManaged/bypassV2
93
+ json_object:
94
+ method: bypassV2
95
+ cid: LTF-F422S-KEU-CID
96
+ configModule: ConfigModule
97
+ payload:
75
98
  method: setTowerFanMode
76
99
  source: APP
77
- phoneBrand: SM N9005
78
- phoneOS: Android
79
- timeZone: America/New_York
80
- token: sample_tk
81
- traceId: TRACE_ID
100
+ data:
101
+ workMode: turbo
102
+ oscillation_on:
82
103
  method: post
83
104
  url: /cloud/v2/deviceManaged/bypassV2
84
- turn_off:
85
- headers:
86
- Content-Type: application/json; charset=UTF-8
87
- User-Agent: okhttp/3.12.1
88
105
  json_object:
89
- acceptLanguage: en
90
- accountID: sample_id
91
- appVersion: 2.8.6
106
+ method: bypassV2
92
107
  cid: LTF-F422S-KEU-CID
93
- configModel: ConfigModule
94
108
  configModule: ConfigModule
95
- debugMode: false
96
- deviceId: LTF-F422S-KEU-CID
97
- deviceRegion: US
109
+ payload:
110
+ method: setOscillationSwitch
111
+ source: APP
112
+ data:
113
+ oscillationSwitch: 1
114
+ oscillation_off:
115
+ method: post
116
+ url: /cloud/v2/deviceManaged/bypassV2
117
+ json_object:
98
118
  method: bypassV2
119
+ cid: LTF-F422S-KEU-CID
120
+ configModule: ConfigModule
99
121
  payload:
122
+ method: setOscillationSwitch
123
+ source: APP
100
124
  data:
101
- powerSwitch: 0
102
- switchIdx: 0
103
- method: setSwitch
125
+ oscillationSwitch: 0
126
+ display_on:
127
+ method: post
128
+ url: /cloud/v2/deviceManaged/bypassV2
129
+ json_object:
130
+ method: bypassV2
131
+ cid: LTF-F422S-KEU-CID
132
+ configModule: ConfigModule
133
+ payload:
134
+ method: setDisplay
104
135
  source: APP
105
- phoneBrand: SM N9005
106
- phoneOS: Android
107
- timeZone: America/New_York
108
- token: sample_tk
109
- traceId: TRACE_ID
136
+ data:
137
+ screenSwitch: 1
138
+ display_off:
110
139
  method: post
111
140
  url: /cloud/v2/deviceManaged/bypassV2
112
- turn_on:
113
- headers:
114
- Content-Type: application/json; charset=UTF-8
115
- User-Agent: okhttp/3.12.1
116
141
  json_object:
117
- acceptLanguage: en
118
- accountID: sample_id
119
- appVersion: 2.8.6
142
+ method: bypassV2
120
143
  cid: LTF-F422S-KEU-CID
121
- configModel: ConfigModule
122
144
  configModule: ConfigModule
123
- debugMode: false
124
- deviceId: LTF-F422S-KEU-CID
125
- deviceRegion: US
145
+ payload:
146
+ method: setDisplay
147
+ source: APP
148
+ data:
149
+ screenSwitch: 0
150
+ mute_on:
151
+ method: post
152
+ url: /cloud/v2/deviceManaged/bypassV2
153
+ json_object:
126
154
  method: bypassV2
155
+ cid: LTF-F422S-KEU-CID
156
+ configModule: ConfigModule
127
157
  payload:
158
+ method: setMuteSwitch
159
+ source: APP
128
160
  data:
129
- powerSwitch: 1
130
- switchIdx: 0
131
- method: setSwitch
161
+ muteSwitch: 1
162
+ mute_off:
163
+ method: post
164
+ url: /cloud/v2/deviceManaged/bypassV2
165
+ json_object:
166
+ method: bypassV2
167
+ cid: LTF-F422S-KEU-CID
168
+ configModule: ConfigModule
169
+ payload:
170
+ method: setMuteSwitch
132
171
  source: APP
133
- phoneBrand: SM N9005
134
- phoneOS: Android
135
- timeZone: America/New_York
136
- token: sample_tk
137
- traceId: TRACE_ID
172
+ data:
173
+ muteSwitch: 0
174
+ set_timer:
138
175
  method: post
139
176
  url: /cloud/v2/deviceManaged/bypassV2
140
- update:
141
- headers:
142
- Content-Type: application/json; charset=UTF-8
143
- User-Agent: okhttp/3.12.1
144
177
  json_object:
145
- acceptLanguage: en
146
- accountID: sample_id
147
- appVersion: 2.8.6
178
+ method: bypassV2
148
179
  cid: LTF-F422S-KEU-CID
149
- configModel: ConfigModule
150
180
  configModule: ConfigModule
151
- debugMode: false
152
- deviceId: LTF-F422S-KEU-CID
153
- deviceRegion: US
181
+ payload:
182
+ method: setTimer
183
+ source: APP
184
+ data:
185
+ action: 'off'
186
+ total: 3600
187
+ get_timer:
188
+ method: post
189
+ url: /cloud/v2/deviceManaged/bypassV2
190
+ json_object:
154
191
  method: bypassV2
192
+ cid: LTF-F422S-KEU-CID
193
+ configModule: ConfigModule
155
194
  payload:
156
- data: {}
157
- method: getTowerFanStatus
195
+ method: getTimer
158
196
  source: APP
159
- phoneBrand: SM N9005
160
- phoneOS: Android
161
- timeZone: America/New_York
162
- token: sample_tk
163
- traceId: TRACE_ID
197
+ data: {}
198
+ clear_timer:
164
199
  method: post
165
200
  url: /cloud/v2/deviceManaged/bypassV2
201
+ json_object:
202
+ method: bypassV2
203
+ cid: LTF-F422S-KEU-CID
204
+ configModule: ConfigModule
205
+ payload:
206
+ method: clearTimer
207
+ source: APP
208
+ data:
209
+ id: 1
@@ -0,0 +1,209 @@
1
+ # Tower fan request contracts, aligned with pyvesync devices/vesyncfan.py.
2
+ # Authentication headers and metadata are supplied by Helpers at runtime.
3
+ update:
4
+ method: post
5
+ url: /cloud/v2/deviceManaged/bypassV2
6
+ json_object:
7
+ method: bypassV2
8
+ cid: LTF-F422S-WJP-CID
9
+ configModule: ConfigModule
10
+ payload:
11
+ method: getTowerFanStatus
12
+ source: APP
13
+ data: {}
14
+ turn_on:
15
+ method: post
16
+ url: /cloud/v2/deviceManaged/bypassV2
17
+ json_object:
18
+ method: bypassV2
19
+ cid: LTF-F422S-WJP-CID
20
+ configModule: ConfigModule
21
+ payload:
22
+ method: setSwitch
23
+ source: APP
24
+ data:
25
+ powerSwitch: 1
26
+ switchIdx: 0
27
+ turn_off:
28
+ method: post
29
+ url: /cloud/v2/deviceManaged/bypassV2
30
+ json_object:
31
+ method: bypassV2
32
+ cid: LTF-F422S-WJP-CID
33
+ configModule: ConfigModule
34
+ payload:
35
+ method: setSwitch
36
+ source: APP
37
+ data:
38
+ powerSwitch: 0
39
+ switchIdx: 0
40
+ change_fan_speed:
41
+ method: post
42
+ url: /cloud/v2/deviceManaged/bypassV2
43
+ json_object:
44
+ method: bypassV2
45
+ cid: LTF-F422S-WJP-CID
46
+ configModule: ConfigModule
47
+ payload:
48
+ method: setLevel
49
+ source: APP
50
+ data:
51
+ levelIdx: 0
52
+ levelType: wind
53
+ manualSpeedLevel: 3
54
+ manual_mode:
55
+ method: post
56
+ url: /cloud/v2/deviceManaged/bypassV2
57
+ json_object:
58
+ method: bypassV2
59
+ cid: LTF-F422S-WJP-CID
60
+ configModule: ConfigModule
61
+ payload:
62
+ method: setTowerFanMode
63
+ source: APP
64
+ data:
65
+ workMode: normal
66
+ auto_mode:
67
+ method: post
68
+ url: /cloud/v2/deviceManaged/bypassV2
69
+ json_object:
70
+ method: bypassV2
71
+ cid: LTF-F422S-WJP-CID
72
+ configModule: ConfigModule
73
+ payload:
74
+ method: setTowerFanMode
75
+ source: APP
76
+ data:
77
+ workMode: auto
78
+ sleep_mode:
79
+ method: post
80
+ url: /cloud/v2/deviceManaged/bypassV2
81
+ json_object:
82
+ method: bypassV2
83
+ cid: LTF-F422S-WJP-CID
84
+ configModule: ConfigModule
85
+ payload:
86
+ method: setTowerFanMode
87
+ source: APP
88
+ data:
89
+ workMode: advancedSleep
90
+ turbo_mode:
91
+ method: post
92
+ url: /cloud/v2/deviceManaged/bypassV2
93
+ json_object:
94
+ method: bypassV2
95
+ cid: LTF-F422S-WJP-CID
96
+ configModule: ConfigModule
97
+ payload:
98
+ method: setTowerFanMode
99
+ source: APP
100
+ data:
101
+ workMode: turbo
102
+ oscillation_on:
103
+ method: post
104
+ url: /cloud/v2/deviceManaged/bypassV2
105
+ json_object:
106
+ method: bypassV2
107
+ cid: LTF-F422S-WJP-CID
108
+ configModule: ConfigModule
109
+ payload:
110
+ method: setOscillationSwitch
111
+ source: APP
112
+ data:
113
+ oscillationSwitch: 1
114
+ oscillation_off:
115
+ method: post
116
+ url: /cloud/v2/deviceManaged/bypassV2
117
+ json_object:
118
+ method: bypassV2
119
+ cid: LTF-F422S-WJP-CID
120
+ configModule: ConfigModule
121
+ payload:
122
+ method: setOscillationSwitch
123
+ source: APP
124
+ data:
125
+ oscillationSwitch: 0
126
+ display_on:
127
+ method: post
128
+ url: /cloud/v2/deviceManaged/bypassV2
129
+ json_object:
130
+ method: bypassV2
131
+ cid: LTF-F422S-WJP-CID
132
+ configModule: ConfigModule
133
+ payload:
134
+ method: setDisplay
135
+ source: APP
136
+ data:
137
+ screenSwitch: 1
138
+ display_off:
139
+ method: post
140
+ url: /cloud/v2/deviceManaged/bypassV2
141
+ json_object:
142
+ method: bypassV2
143
+ cid: LTF-F422S-WJP-CID
144
+ configModule: ConfigModule
145
+ payload:
146
+ method: setDisplay
147
+ source: APP
148
+ data:
149
+ screenSwitch: 0
150
+ mute_on:
151
+ method: post
152
+ url: /cloud/v2/deviceManaged/bypassV2
153
+ json_object:
154
+ method: bypassV2
155
+ cid: LTF-F422S-WJP-CID
156
+ configModule: ConfigModule
157
+ payload:
158
+ method: setMuteSwitch
159
+ source: APP
160
+ data:
161
+ muteSwitch: 1
162
+ mute_off:
163
+ method: post
164
+ url: /cloud/v2/deviceManaged/bypassV2
165
+ json_object:
166
+ method: bypassV2
167
+ cid: LTF-F422S-WJP-CID
168
+ configModule: ConfigModule
169
+ payload:
170
+ method: setMuteSwitch
171
+ source: APP
172
+ data:
173
+ muteSwitch: 0
174
+ set_timer:
175
+ method: post
176
+ url: /cloud/v2/deviceManaged/bypassV2
177
+ json_object:
178
+ method: bypassV2
179
+ cid: LTF-F422S-WJP-CID
180
+ configModule: ConfigModule
181
+ payload:
182
+ method: setTimer
183
+ source: APP
184
+ data:
185
+ action: 'off'
186
+ total: 3600
187
+ get_timer:
188
+ method: post
189
+ url: /cloud/v2/deviceManaged/bypassV2
190
+ json_object:
191
+ method: bypassV2
192
+ cid: LTF-F422S-WJP-CID
193
+ configModule: ConfigModule
194
+ payload:
195
+ method: getTimer
196
+ source: APP
197
+ data: {}
198
+ clear_timer:
199
+ method: post
200
+ url: /cloud/v2/deviceManaged/bypassV2
201
+ json_object:
202
+ method: bypassV2
203
+ cid: LTF-F422S-WJP-CID
204
+ configModule: ConfigModule
205
+ payload:
206
+ method: clearTimer
207
+ source: APP
208
+ data:
209
+ id: 1