homebridge-eosstb 2.4.0-alpha.46 → 2.4.0-beta.1

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.
Files changed (3) hide show
  1. package/CHANGELOG.md +19 -255
  2. package/index.js +20 -0
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -4,271 +4,35 @@ All notable changes to this project will be documented in this file.
4
4
  See the [Readme file](https://github.com/jsiegenthaler/homebridge-eosstb/blob/master/README.md) for full plugin documentation.
5
5
  Please restart Homebridge after every plugin update.
6
6
 
7
- # Bug Fixes and Improvements
7
+ ## 2.4.0-beta.1 (2026-05-09)
8
8
 
9
- ## Current To-Do and In-Work List (For Future Releases, in rough order of priority):
9
+ This release represents a major rewrite of the plugin, significantly improving robustness, HAP compliance, and code quality throughout, and making it work for Switzerland.
10
10
 
11
- TODO
12
- review all http endpoints, make sure a suitable log entry is being made so I can check the data is plausible
11
+ - Added CH login support: Adapted the login sequence and updated config.schema.json to support the new Switzerland login method
12
+ - Overhauled HAP compliance: Full audit and rewrite of all HAP code for strict compliance
13
+ - Added support for Homebridge v2: Plugin now fully supports Homebridge 2.0.0+ and Node.js 24+; resolved breaking changes introduced by HAP-NodeJS v1 shipped with Homebridge v2
14
+ - Improved MQTT handling: Optimised mqtt code and added clean unsubscribe on plugin shutdown
15
+ - Improved channel list management: Master channel list refresh now runs once daily at a random time between 00:00–06:00
16
+ - Updated channel ConfiguredName to read-only
17
+ - Optimised handling of remote control and media control
18
+ - Improved robustness and startup
19
+ - Improved overall code quality
20
+ - Updated dependencies to current versions
13
21
 
14
- configsvc
15
- authorizationService DONE
16
- personalizationService DONE
17
- purchaseService
18
- recordingService
19
- linearService
20
- sessionService
22
+ ## 2.3.9 (2026-05-09)
21
23
 
22
- IMPORTANR
23
- Implement setTargetMediaState to send the Play/Pause/Stop functions, so that Eve can control the media state. Watch out for sending commands twice when using the remote control. maybe the sendKey redirects to the setmediaState?
24
-
25
- Behavious: SetMediaState from 0 to 1 will start playing.
26
- Behavious: SetMediaState from 0 to 1 will start playing.
27
- Behavious: SetMediaState from 2 to 1 will start playing.
28
- Behavious: SetMediaState from 1 to 2 will start playing.
29
- unreliable, compare to webclient... this is driving me crazy!
30
- might have to revert to sendKeys to set Play and Stop/Pause
31
-
32
-
33
-
34
- CHECK
35
- make sendKey logging consistent
36
-
37
- CHECK
38
- what are my issues with persistence?
39
- Persisting the input state visibility between restarts would be good
40
- Visibility cannot be set if the user has no WriteAccess to the channel list!!
41
- Persistance test:
42
- 1. Hide the channel SRF info using Home app
43
- 2. Force-close and reopen the home app. Confirm channel is still hidden
44
- 3. Confirm the current visibility state in the plugin logs is correct
45
- 3. Restart the plugin
46
- 4. Observe the current visibility state in the plugin logs - does it get the right value from HomeKit HAP? If so, no persistance required.
47
-
48
- Device name: this comes from backend
49
- Channel name: overwrite not allowed - can we disable in HomeKit. Yes, but prevents setting visibility
50
-
51
- CHALLENGE
52
- The mostWatchedChannelList is not working
53
-
54
- ## 2.4.0-alpha.46 (2026-05-09)
55
- - Fixed the issue with volume commands
56
-
57
- ## 2.4.0-alpha.45 (2026-05-09)
58
- - Added some debugging to the volume commands to trace an issue
59
-
60
- ## 2.4.0-alpha.44 (2026-05-09)
61
- - Fixed some log level issues
62
- - Fixed issue with Remove volumeDown causing Unhandled error thrown inside write handler for characteristic
63
-
64
- ## 2.4.0-alpha.43 (2026-05-09)
65
- - Bumped dependency "semver": "^7.8.0",
66
-
67
- ## 2.4.0-alpha.42 (2026-05-07)
68
- - changed the name of hidden channels from HIDDEN_xx to HIDDENxx to stop the HAP-NodeJS WARNING: The accessory 'HIDDEN_32' has an invalid 'Name' characteristic
69
-
70
- ## 2.4.0-alpha.42 (2026-05-07)
71
- - changed the name of hidden channels from HIDDEN_xx to HIDDENxx to stop the HAP-NodeJS WARNING: The accessory 'HIDDEN_32' has an invalid 'Name' characteristic
72
-
73
- ## 2.4.0-alpha.41 (2026-05-07)
74
- - fixed typos in this change log
75
-
76
- ## 2.4.0-alpha.40 (2026-05-07)
77
- - Changes to code to support HAP-NodeJS still works with Homebridge v1.11.x
78
- - Reinstated engine "homebridge": "^1.11.4||^2.0.0",
79
-
80
- ## 2.4.0-alpha.39 (2026-05-07)
81
- - fixed issues caused by HAP-NodeJS v1 released with Homebridge v2 where use of enums off the Characteristic class is no longer supported
82
- - due to these HAP-NodeJS changes, support for Homebridge versions below 2.0.0 is no longer provided
83
- - Bumped engine "homebridge": "^2.0.0",
24
+ - Fixed Error on Homebridge v2: Cannot read properties of undefined (reading 'STRING')
25
+ - Adapted hidden channel name to reduce warning messages with Homebridge v2
26
+ - Updated iOS and Homebridge version references in Readme
27
+ - Bumped engine "^1.11.4||^2.0.0",
84
28
  - Bumped engine "node": "^24.15.0"
85
29
  - Bumped dependency "axios": "^1.16.0",
86
30
  - Bumped dependency "axios-cookiejar-support": "^7.0.0",
87
31
  - Bumped dependency "mqtt": "^5.15.1",
88
- - Bumped dependency "puppeteer-core": "^24.43.0",
89
32
  - Bumped dependency "qs": "^6.15.1",
33
+ - Bumped dependency "semver": "^7.8.0",
90
34
  - Bumped dependency "tough-cookie": "^6.0.1",
91
- - Bumped dependency "ws": "^8.20.0"
92
-
93
- ## 2.4.0-alpha.38 (2026-03-07)
94
-
95
- - changes to settargetmediastate & setMediaState
96
-
97
- ## 2.4.0-alpha.37 (2026-03-07)
98
-
99
- - changes to settargetmediastate
100
-
101
- ## 2.4.0-alpha.36 (2026-03-07)
102
-
103
- - changes to settargetmediastate
104
-
105
- ## 2.4.0-alpha.35 (2026-03-07)
106
-
107
- - changes to settargetmediastate
108
-
109
- ## 2.4.0-alpha.34 (2026-03-07)
110
-
111
- - changes to settargetmediastate
112
-
113
- ## 2.4.0-alpha.33 (2026-03-07)
114
-
115
- - optimised getmqtttoken
116
- - checked function of setTargetMediaState , needs testing, controlled by Eve
117
-
118
- ## 2.4.0-alpha.32 (2026-03-07)
119
-
120
- - made all urls into proper url objects
121
- - fixed issue with getMostWatchedChannels
122
-
123
- ## 2.4.0-alpha.31 (2026-03-07)
124
-
125
- - change the master channel list refresh to once a day at a random time between 0000 and 0600. The user setting has no impact and can be removed
126
- - cleaned up some more diagnostic logging
127
-
128
- ## 2.4.0-alpha.30 (2026-03-07)
129
-
130
- - cleaned up some diagnostic logging
131
-
132
- ## 2.4.0-alpha.29 (2026-03-06)
133
-
134
- - optimised refreshDeviceChannelList
135
-
136
- ## 2.4.0-alpha.28 (2026-03-06)
137
-
138
- - fixed issue with detecting status, introduce 2 versions ago
139
-
140
- ## 2.4.0-alpha.27 (2026-03-06)
141
-
142
- -- removed test code to detect plugin shutdown
143
-
144
- ## 2.4.0-alpha.26 (2026-03-06)
145
-
146
- -- added test code to detect plugin shutdown
147
- - added clean unsubscribe on plugin shutdown
148
-
149
- ## 2.4.0-alpha.25 (2026-03-05)
150
-
151
- - fixed introduced bug in setRemoteKey
152
-
153
- ## 2.4.0-alpha.24 (2026-03-05)
154
-
155
- - made channel ConfiguredName read only as the backend defines the channel name
156
-
157
- ## 2.4.0-alpha.23 (2026-03-05)
158
-
159
- - optimised setRemoteKey
160
-
161
- ## 2.4.0-alpha.22 (2026-03-05)
162
-
163
- - fixed error handling in refreshMasterChannelList
164
-
165
- ## 2.4.0-alpha.21 (2026-03-05)
166
-
167
- - fixed logging bug in sendKey
168
-
169
- ## 2.4.0-alpha.20 (2026-03-05)
170
-
171
- - improved accessory information display to show a better serialnumber
172
- - updated set-top box model name for 2008C
173
- - added more robustness to many calls in case we never get a configsvc response
174
- - optimised the mqttDeviceStateHandler
175
- - improved refreshMasterChannelList
176
- - improved a lot of webservice calls, removing promises and going to try-catch
177
-
178
- ## 2.4.0-alpha.19 (2026-03-04)
179
-
180
- - removed some dead code
181
- - enabled handler for setClosedCaptions and setPictureMode, test control from Eve app
182
- - improved send key logging
183
-
184
- ## 2.4.0-alpha.18 (2026-03-03)
185
-
186
- - Fixed dislayOrder crash on startup - check this!
187
- - Optimised post publishExternalAccessories HAP updates
188
- - Changed all updateValue to updateCharacteristic post-publish to be more HAP compliant
189
-
190
- ## 2.4.0-alpha.17 (2026-03-03)
191
-
192
- - Cleaned up the platform code
193
- - Changed all get/set handlers to async
194
- - Optimised all get/set handlers
195
- - More HAP minor bug fixes and optimisations
196
-
197
- ## 2.4.0-alpha.16 (2026-03-03)
198
-
199
- - Fixed bug: TypeError: this.prepareinputSourceServices is not a function
200
-
201
- ## 2.4.0-alpha.15 (2026-03-03)
202
-
203
- - Renamed Current Channnel Id and Current Channel Name to Active Channel Id and Active Channel Name for consistency with Active Identifier
204
-
205
- ## 2.4.0-alpha.14 (2026-03-03)
206
-
207
- - Optimised HAP code for strict compliance
208
- - Removed debug logging
209
-
210
- ## 2.4.0-alpha.13 (2026-03-03)
211
-
212
- - Fixes to logging of getInputName for diagnostics
213
-
214
- ## 2.4.0-alpha.12 (2026-03-03)
215
-
216
- - More improvements to get ConfiguredName working properly on the Eve app (needs testing for both TV and Inputs)
217
-
218
- ## 2.4.0-alpha.11 (2026-03-03)
219
-
220
- - Fixed logging bug in setInputName
221
-
222
- ## 2.4.0-alpha.10 (2026-03-03)
223
-
224
- ## 2.4.0-alpha.9 (2026-03-03)
225
-
226
- ## 2.4.0-alpha.8 (2026-03-03)
227
-
228
- - More improvements to get ConfiguredName working properly on the Eve app (needs testing for both TV and Inputs)
229
-
230
- ## 2.4.0-alpha.7 (2026-03-03)
231
-
232
- - Corrected some debug log levels
233
- - Fixed ConfiguredName being empty on the Eve app (needs testing for both TV and Inputs)
234
-
235
- ## 2.4.0-alpha.6 (2026-03-02)
236
-
237
- - Removed getMute and getVolume, these are not supported
238
- - More code optimisations
239
-
240
- ## 2.4.0-alpha.5 (2026-03-02)
241
-
242
- - More code performance improvements
243
- - Improved all HAP code
244
-
245
- ## 2.4.0-alpha.4 (2026-03-02)
246
-
247
- - Fixed self bug in volume control
248
-
249
- ## 2.4.0-alpha.4 (2026-03-02)
250
-
251
- - Fixed self bug in volume control
252
-
253
- ## 2.4.0-alpha.3 (2026-03-02)
254
-
255
- - Fixed new introduced bug with displayed channel being incorrect (offset by 1)
256
- - Added "devMode": true support to config.json
257
-
258
- ## 2.4.0-alpha.2 (2026-03-01)
259
-
260
- - Improved README.md text
261
- - Improved config.schema.json description text
262
- - Improved discovery of devices and accessory setup
263
- - Improved mqtt handling
264
- - Improved overall code robustness and fixed many small bugs
265
- - Fixed spelling mistakes in comments
266
-
267
- ## 2.4.0-alpha.1 (2026-02-27)
268
-
269
- - Adapted login sequence for CH
270
- - Updated config.schema.json to support new CH login method and improced description texts
271
- - Bumped dependency "axios": "^1.13.6",
35
+ - Bumped dependency "ws": "^8.20.0"
272
36
 
273
37
  ## 2.3.8 (2026-02-27)
274
38
 
package/index.js CHANGED
@@ -4440,6 +4440,13 @@ class StbPlatform {
4440
4440
  deviceId = mqttMessage.source;
4441
4441
  stbState = mqttMessage.state;
4442
4442
 
4443
+ // Look up the per-device instance so we can read device-specific state
4444
+ // (e.g. previousPowerState) before the switch runs
4445
+ const deviceIndex = this.devices.findIndex(
4446
+ (device) => device.deviceId === deviceId,
4447
+ );
4448
+ const stbDevice = deviceIndex > -1 ? this.stbDevices[deviceIndex] : null;
4449
+
4443
4450
  // Box setting: StandbyPowerConsumption = FastStart / ActiveStart / EcoSlowstart
4444
4451
  // "Fast start": when turned off, goes to ONLINE_STANDBY and stays there. Box can be turned on via mqtt
4445
4452
  // "Active start": when turned off, stays at ONLINE_STANDBY for 5min, then goes to OFFLINE_NETWORK_STANDBY. box can be turned on via ??
@@ -4448,6 +4455,18 @@ class StbPlatform {
4448
4455
  case "ONLINE_RUNNING": // ONLINE_RUNNING: power is on
4449
4456
  currStatusActive = Characteristic.Active.ACTIVE; // bool, 0 = not active, 1 = active
4450
4457
  currPowerState = Characteristic.Active.ACTIVE;
4458
+ // Detect power-off → power-on transition per device.
4459
+ // Set PLAY immediately; CPE.uiStatus will overwrite with the
4460
+ // accurate speed-derived state shortly after.
4461
+ if (stbDevice?.previousPowerState === Characteristic.Active.INACTIVE) {
4462
+ currMediaState = Characteristic.CurrentMediaState.PLAY;
4463
+ if (this.debugLevel > 0) {
4464
+ this.log.warn(
4465
+ "mqttClient: STB status: power-on transition for %s, setting mediaState to PLAY",
4466
+ deviceId,
4467
+ );
4468
+ }
4469
+ }
4451
4470
  break;
4452
4471
  case "ONLINE_STANDBY": // ONLINE_STANDBY: power is off, device is on standby, still reachable over the network, can be turned on via mqtt.
4453
4472
  currStatusActive = Characteristic.Active.ACTIVE; // bool, 0 = not active, 1 = active
@@ -5610,6 +5629,7 @@ class StbDevice {
5610
5629
  this.currentStatusFault = Characteristic.StatusFault.NO_FAULT;
5611
5630
  this.currentInUse = Characteristic.InUse.NOT_IN_USE;
5612
5631
  this.currentPowerState = Characteristic.Active.INACTIVE;
5632
+ this.previousPowerState = Characteristic.Active.INACTIVE;
5613
5633
  this.currentStatusActive = Characteristic.Active.INACTIVE;
5614
5634
 
5615
5635
  this.currentChannelId = NO_CHANNEL_ID; // string eg SV09038
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "displayName": "Homebridge EOSSTB",
4
4
  "description": "Add your set-top box to Homekit (for Telenet BE, Sunrise CH, UPC SK, Virgin Media GB & IE, Ziggo NL)",
5
5
  "author": "Jochen Siegenthaler (https://github.com/jsiegenthaler/)",
6
- "version": "2.4.0-alpha.46",
6
+ "version": "2.4.0-beta.1",
7
7
  "platformname": "eosstb",
8
8
  "dependencies": {
9
9
  "axios": "^1.16.0",