@homebridge-plugins/homebridge-smarthq 0.5.0-beta.3 → 0.5.0-beta.31
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/.github/ISSUE_TEMPLATE/config.yml +1 -1
- package/.github/copilot-instructions.md +90 -0
- package/.github/scripts/branch-helper.sh +41 -0
- package/.github/workflows/beta-release.yml +1 -1
- package/.github/workflows/release.yml +53 -17
- package/CHANGELOG.md +563 -18
- package/MATTER.md +304 -0
- package/README.md +15 -0
- package/config.schema.json +14 -5
- package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.js +3 -1
- package/dist/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.js.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js +3 -1
- package/dist/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.js.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalPowerSvcManager.js.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js +12 -5
- package/dist/devices/OpalIceMaker/Managers/OpalProgressSvcManager.js.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js +4 -2
- package/dist/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.js.map +1 -1
- package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts +3 -4
- package/dist/devices/OpalIceMaker/OpalDeviceBase.d.ts.map +1 -1
- package/dist/devices/OpalIceMaker/OpalDeviceBase.js +3 -18
- package/dist/devices/OpalIceMaker/OpalDeviceBase.js.map +1 -1
- package/dist/devices/advantium.d.ts +10 -0
- package/dist/devices/advantium.d.ts.map +1 -0
- package/dist/devices/advantium.js +75 -0
- package/dist/devices/advantium.js.map +1 -0
- package/dist/devices/airConditioner.d.ts +11 -2
- package/dist/devices/airConditioner.d.ts.map +1 -1
- package/dist/devices/airConditioner.js +108 -17
- package/dist/devices/airConditioner.js.map +1 -1
- package/dist/devices/beverageCenter.d.ts +10 -0
- package/dist/devices/beverageCenter.d.ts.map +1 -0
- package/dist/devices/beverageCenter.js +125 -0
- package/dist/devices/beverageCenter.js.map +1 -0
- package/dist/devices/clothesDryer.d.ts +21 -0
- package/dist/devices/clothesDryer.d.ts.map +1 -0
- package/dist/devices/clothesDryer.js +240 -0
- package/dist/devices/clothesDryer.js.map +1 -0
- package/dist/devices/clothesWasher.d.ts +21 -0
- package/dist/devices/clothesWasher.d.ts.map +1 -0
- package/dist/devices/clothesWasher.js +251 -0
- package/dist/devices/clothesWasher.js.map +1 -0
- package/dist/devices/coffeeMaker.d.ts +10 -0
- package/dist/devices/coffeeMaker.d.ts.map +1 -0
- package/dist/devices/coffeeMaker.js +79 -0
- package/dist/devices/coffeeMaker.js.map +1 -0
- package/dist/devices/device.d.ts +107 -13
- package/dist/devices/device.d.ts.map +1 -1
- package/dist/devices/device.js +386 -60
- package/dist/devices/device.js.map +1 -1
- package/dist/devices/dishwasher.d.ts +9 -3
- package/dist/devices/dishwasher.d.ts.map +1 -1
- package/dist/devices/dishwasher.js +142 -29
- package/dist/devices/dishwasher.js.map +1 -1
- package/dist/devices/hood.d.ts +41 -0
- package/dist/devices/hood.d.ts.map +1 -0
- package/dist/devices/hood.js +332 -0
- package/dist/devices/hood.js.map +1 -0
- package/dist/devices/microwave.d.ts +19 -0
- package/dist/devices/microwave.d.ts.map +1 -0
- package/dist/devices/microwave.js +144 -0
- package/dist/devices/microwave.js.map +1 -0
- package/dist/devices/oven.d.ts +9 -2
- package/dist/devices/oven.d.ts.map +1 -1
- package/dist/devices/oven.js +245 -43
- package/dist/devices/oven.js.map +1 -1
- package/dist/devices/refrigerator.d.ts +37 -2
- package/dist/devices/refrigerator.d.ts.map +1 -1
- package/dist/devices/refrigerator.js +548 -34
- package/dist/devices/refrigerator.js.map +1 -1
- package/dist/devices/waterFilter.d.ts +10 -0
- package/dist/devices/waterFilter.d.ts.map +1 -0
- package/dist/devices/waterFilter.js +67 -0
- package/dist/devices/waterFilter.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +19 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +158 -0
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/devices/waterSoftener.d.ts +10 -0
- package/dist/devices/waterSoftener.d.ts.map +1 -0
- package/dist/devices/waterSoftener.js +67 -0
- package/dist/devices/waterSoftener.js.map +1 -0
- package/dist/getAccessToken.d.ts.map +1 -1
- package/dist/getAccessToken.js +6 -0
- package/dist/getAccessToken.js.map +1 -1
- package/dist/platform.d.ts +25 -1
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +548 -70
- package/dist/platform.js.map +1 -1
- package/dist/platform.test.d.ts +2 -0
- package/dist/platform.test.d.ts.map +1 -0
- package/dist/platform.test.js +80 -0
- package/dist/platform.test.js.map +1 -0
- package/dist/settings.d.ts +23 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +13 -0
- package/dist/settings.js.map +1 -1
- package/docs/assets/highlight.css +7 -0
- package/docs/assets/main.js +5 -5
- package/docs/assets/navigation.js +1 -0
- package/docs/assets/search.js +1 -0
- package/docs/assets/style.css +248 -226
- package/docs/classes/SmartHQPlatform.html +51 -56
- package/docs/hierarchy.html +1 -0
- package/docs/index.html +22 -12
- package/docs/interfaces/DeviceOptions.html +2 -3
- package/docs/interfaces/SmartHQPlatformConfig.html +6 -17
- package/docs/interfaces/SmartHqContext.html +6 -4
- package/docs/interfaces/SmartHqERDResponse.html +7 -8
- package/docs/interfaces/credentials.html +3 -4
- package/docs/interfaces/devicesConfig.html +8 -8
- package/docs/interfaces/options.html +7 -8
- package/docs/media/copilot-instructions.md +90 -0
- package/docs/modules.html +1 -2
- package/docs/variables/API_URL.html +1 -2
- package/docs/variables/ERD_CODES.html +1 -2
- package/docs/variables/ERD_TYPES.html +1 -2
- package/docs/variables/KEEPALIVE_TIMEOUT.html +1 -2
- package/docs/variables/LOGIN_URL.html +2 -3
- package/docs/variables/OAUTH2_CLIENT_ID.html +1 -2
- package/docs/variables/OAUTH2_CLIENT_SECRET.html +1 -2
- package/docs/variables/OAUTH2_REDIRECT_URI.html +1 -2
- package/docs/variables/PLATFORM_NAME.html +2 -3
- package/docs/variables/PLUGIN_NAME.html +2 -3
- package/docs/variables/SECURE_URL.html +2 -3
- package/docs/variables/default.html +1 -0
- package/package.json +22 -33
- package/typedoc.json +0 -4
- package/vitest.config.ts +6 -5
- package/.github/workflows/build.yml +0 -18
- package/.github/workflows/changerelease.yml +0 -11
- package/.github/workflows/labeler.yml +0 -9
- package/.github/workflows/release-drafter.yml +0 -14
- package/docs/assets/dmt/dmt-component-data.js +0 -1
- package/docs/assets/dmt/dmt-components.css +0 -20
- package/docs/assets/dmt/dmt-components.js +0 -67
- package/docs/assets/dmt/dmt-search.cmp +0 -0
- package/docs/assets/dmt/dmt-theme.css +0 -1
- package/docs/functions/default.html +0 -2
package/MATTER.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Matter Support for homebridge-smarthq
|
|
2
|
+
|
|
3
|
+
This document describes the Matter implementation for the homebridge-smarthq plugin.
|
|
4
|
+
|
|
5
|
+
## Architecture Overview
|
|
6
|
+
|
|
7
|
+
The plugin now supports **both HAP (HomeKit Accessory Protocol) and Matter** protocols. Each device intelligently chooses which protocol to use based on:
|
|
8
|
+
|
|
9
|
+
1. Homebridge Matter availability (requires Homebridge 2.0.0-beta.63+)
|
|
10
|
+
2. Matter enabled status in Homebridge settings
|
|
11
|
+
3. Per-device configuration (`useMatter` option)
|
|
12
|
+
|
|
13
|
+
## Key Components
|
|
14
|
+
|
|
15
|
+
### 1. Platform Changes ([src/platform.ts](src/platform.ts))
|
|
16
|
+
|
|
17
|
+
**New Properties:**
|
|
18
|
+
|
|
19
|
+
- `matterEnabled`: Tracks if Matter is enabled in Homebridge settings
|
|
20
|
+
- `matterAvailable`: Tracks if Homebridge supports Matter API
|
|
21
|
+
|
|
22
|
+
**New Methods:**
|
|
23
|
+
|
|
24
|
+
- `checkMatterSupport()`: Detects Matter availability and enabled status at startup
|
|
25
|
+
- `shouldUseMatter(device)`: Determines if a device should use Matter or HAP
|
|
26
|
+
- `createSmartHQRefrigeratorMatter()`: Creates Matter version of refrigerator accessory
|
|
27
|
+
- `createSmartHQRefrigeratorHAP()`: Creates HAP version of refrigerator accessory (existing behavior)
|
|
28
|
+
|
|
29
|
+
**Startup Flow:**
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
Constructor
|
|
33
|
+
├─ checkMatterSupport() // Check Matter availability
|
|
34
|
+
├─ discoverDevices()
|
|
35
|
+
└─ For each device:
|
|
36
|
+
├─ shouldUseMatter(device) // Decide protocol
|
|
37
|
+
├─ Create Matter accessory OR
|
|
38
|
+
└─ Create HAP accessory
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 2. Matter Base Class ([src/devices/deviceMatter.ts](src/devices/deviceMatter.ts))
|
|
42
|
+
|
|
43
|
+
Base class for all Matter-enabled devices providing:
|
|
44
|
+
|
|
45
|
+
**Core Features:**
|
|
46
|
+
|
|
47
|
+
- ERD (Electronic Refrigerator Descriptor) reading/writing
|
|
48
|
+
- Matter cluster state updates
|
|
49
|
+
- Device logging and configuration
|
|
50
|
+
- Firmware version management
|
|
51
|
+
- Unsupported ERD caching (prevents API spam)
|
|
52
|
+
|
|
53
|
+
**Abstract Methods:**
|
|
54
|
+
|
|
55
|
+
- `createMatterAccessory()`: Must be implemented by each device type
|
|
56
|
+
|
|
57
|
+
**Helper Methods:**
|
|
58
|
+
|
|
59
|
+
- `createBaseMatterConfig()`: Generates common Matter accessory info
|
|
60
|
+
- `updateMatterState()`: Updates Matter cluster attributes
|
|
61
|
+
- `readErd()` / `writeErd()`: SmartHQ API communication
|
|
62
|
+
|
|
63
|
+
### 3. Matter Refrigerator Implementation ([src/devices/refrigeratorMatter.ts](src/devices/refrigeratorMatter.ts))
|
|
64
|
+
|
|
65
|
+
**Example implementation showing:**
|
|
66
|
+
|
|
67
|
+
- Matter Thermostat device type for temperature control
|
|
68
|
+
- Setpoint raise/lower handler
|
|
69
|
+
- Periodic ERD refresh
|
|
70
|
+
- Temperature/setpoint updates via Matter clusters
|
|
71
|
+
- Door status and ice bucket status parsing (ready for multi-endpoint support)
|
|
72
|
+
|
|
73
|
+
**Matter Device Type:** `Thermostat`
|
|
74
|
+
|
|
75
|
+
- `localTemperature`: Current fridge temperature (0.01°C units)
|
|
76
|
+
- `occupiedCoolingSetpoint`: Target temperature (0.01°C units)
|
|
77
|
+
- `systemMode`: Always 3 (COOL)
|
|
78
|
+
- `thermostatRunningMode`: 3 (cooling)
|
|
79
|
+
|
|
80
|
+
**Clusters Used:**
|
|
81
|
+
|
|
82
|
+
- `Thermostat`: Temperature control
|
|
83
|
+
- `TemperatureMeasurement`: Current temperature reading
|
|
84
|
+
|
|
85
|
+
### 4. Device Configuration ([src/settings.ts](src/settings.ts))
|
|
86
|
+
|
|
87
|
+
**New Config Option:**
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
/**
|
|
91
|
+
* Device-level Matter override.
|
|
92
|
+
* If set, this device will use Matter (true) or HAP (false) regardless of global setting.
|
|
93
|
+
*/
|
|
94
|
+
export interface SmartHQDeviceConfig {
|
|
95
|
+
// ...other options...
|
|
96
|
+
useMatter?: boolean
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Usage
|
|
101
|
+
|
|
102
|
+
### Configuration
|
|
103
|
+
|
|
104
|
+
**Enable Matter globally (all devices use Matter when available):**
|
|
105
|
+
|
|
106
|
+
```json
|
|
107
|
+
{
|
|
108
|
+
"platform": "SmartHQ",
|
|
109
|
+
"name": "SmartHQ",
|
|
110
|
+
"credentials": {
|
|
111
|
+
"username": "your-email@example.com",
|
|
112
|
+
"password": "your-password"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Disable Matter for specific device:**
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{
|
|
121
|
+
"platform": "SmartHQ",
|
|
122
|
+
"name": "SmartHQ",
|
|
123
|
+
"devices": [
|
|
124
|
+
{
|
|
125
|
+
"useMatter": false // This device will use HAP instead
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Requirements
|
|
132
|
+
|
|
133
|
+
- Homebridge 2.0.0-beta.63 or later
|
|
134
|
+
- Matter enabled in Homebridge settings:
|
|
135
|
+
- Main bridge: Enable Matter in Homebridge UI settings
|
|
136
|
+
- Child bridge: Enable Matter in plugin bridge settings
|
|
137
|
+
|
|
138
|
+
## Device Support Matrix
|
|
139
|
+
|
|
140
|
+
| Device Type | HAP Support | Matter Support | Matter Device Type | Notes |
|
|
141
|
+
| --------------- | ----------- | -------------- | ------------------ | ----------------------------------------------------------------- |
|
|
142
|
+
| Refrigerator | ✅ Full | ✅ Partial | Thermostat | Temperature control implemented, doors/ice pending multi-endpoint |
|
|
143
|
+
| Clothes Washer | ✅ Full | ⏳ Planned | Custom/Outlet | Needs implementation |
|
|
144
|
+
| Clothes Dryer | ✅ Full | ⏳ Planned | Custom/Outlet | Needs implementation |
|
|
145
|
+
| Dishwasher | ✅ Full | ⏳ Planned | Custom/Outlet | Needs implementation |
|
|
146
|
+
| Oven | ✅ Full | ⏳ Planned | Thermostat | Needs implementation |
|
|
147
|
+
| Ice Maker | ✅ Full | ⏳ Planned | Custom | Needs implementation |
|
|
148
|
+
| Air Conditioner | ✅ Full | ⏳ Planned | Thermostat/Fan | Needs implementation |
|
|
149
|
+
| Hood | ✅ Full | ⏳ Planned | Fan | Needs implementation |
|
|
150
|
+
| Water Filter | ✅ Full | ⏳ Planned | FilterMaintenance | Needs implementation |
|
|
151
|
+
| Water Softener | ✅ Full | ⏳ Planned | FilterMaintenance | Needs implementation |
|
|
152
|
+
| Water Heater | ✅ Full | ⏳ Planned | Thermostat | Needs implementation |
|
|
153
|
+
|
|
154
|
+
## Implementation Status
|
|
155
|
+
|
|
156
|
+
### ✅ Completed
|
|
157
|
+
|
|
158
|
+
1. Matter availability detection
|
|
159
|
+
2. HAP/Matter decision logic
|
|
160
|
+
3. Matter base class with ERD support
|
|
161
|
+
4. Refrigerator Matter implementation (temperature control)
|
|
162
|
+
5. Type declarations for Matter API
|
|
163
|
+
|
|
164
|
+
### ⏳ In Progress
|
|
165
|
+
|
|
166
|
+
- Multi-endpoint support for refrigerator doors and ice buckets
|
|
167
|
+
- Matter implementations for remaining device types
|
|
168
|
+
|
|
169
|
+
### 📋 To Do
|
|
170
|
+
|
|
171
|
+
1. Complete refrigerator multi-endpoint support
|
|
172
|
+
2. Implement Matter versions of:
|
|
173
|
+
- Clothes Washer
|
|
174
|
+
- Clothes Dryer
|
|
175
|
+
- Dishwasher
|
|
176
|
+
- Oven
|
|
177
|
+
- Ice Maker
|
|
178
|
+
- Air Conditioner
|
|
179
|
+
- Hood
|
|
180
|
+
- Water Filter/Softener/Heater
|
|
181
|
+
3. Add Matter accessory caching and restoration
|
|
182
|
+
4. Add comprehensive error handling
|
|
183
|
+
5. Testing across Matter controllers (Apple Home, Google Home, Amazon Alexa)
|
|
184
|
+
|
|
185
|
+
## Implementation Notes
|
|
186
|
+
|
|
187
|
+
### Type Errors
|
|
188
|
+
|
|
189
|
+
The current implementation has TypeScript errors because the Matter API types are not yet available in the `homebridge` package types. A type declaration file (`matter.d.ts`) has been created to provide these types, but TypeScript module augmentation requires additional configuration.
|
|
190
|
+
|
|
191
|
+
**Resolution Options:**
|
|
192
|
+
|
|
193
|
+
1. Wait for official Homebridge 2.0 types with Matter support
|
|
194
|
+
2. Install `@types/homebridge` beta version when available
|
|
195
|
+
3. Add custom type declarations to `tsconfig.json` paths
|
|
196
|
+
|
|
197
|
+
### ERD Caching
|
|
198
|
+
|
|
199
|
+
Both HAP and Matter implementations share the ERD caching system that remembers unsupported ERDs to prevent API spam (400 errors).
|
|
200
|
+
|
|
201
|
+
### Fallback Behavior
|
|
202
|
+
|
|
203
|
+
If Matter registration fails, the plugin automatically falls back to HAP:
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
try {
|
|
207
|
+
await this.createMatterAccessory()
|
|
208
|
+
} catch (error) {
|
|
209
|
+
this.log.warn('Matter failed, falling back to HAP')
|
|
210
|
+
await this.createHAPAccessory()
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Development Guidelines
|
|
215
|
+
|
|
216
|
+
### Adding Matter Support to New Device
|
|
217
|
+
|
|
218
|
+
1. Create `deviceNameMatter.ts` extending `deviceBaseMatter`
|
|
219
|
+
2. Implement `createMatterAccessory()` method
|
|
220
|
+
3. Choose appropriate Matter device type
|
|
221
|
+
4. Map ERDs to Matter clusters
|
|
222
|
+
5. Implement cluster handlers
|
|
223
|
+
6. Add periodic refresh logic
|
|
224
|
+
7. Update platform.ts with device creation methods:
|
|
225
|
+
- `createSmartHQDeviceName()`
|
|
226
|
+
- `createSmartHQDeviceNameHAP()`
|
|
227
|
+
- `createSmartHQDeviceNameMatter()`
|
|
228
|
+
|
|
229
|
+
### Matter Device Type Selection
|
|
230
|
+
|
|
231
|
+
| SmartHQ Device | Recommended Matter Type | Clusters |
|
|
232
|
+
| --------------- | ----------------------- | ---------------------------------- |
|
|
233
|
+
| Refrigerator | Thermostat | Thermostat, TemperatureMeasurement |
|
|
234
|
+
| Oven | Thermostat | Thermostat, TemperatureMeasurement |
|
|
235
|
+
| Washer/Dryer | OnOffOutlet + Custom | OnOff, OperationalState |
|
|
236
|
+
| Dishwasher | OnOffOutlet + Custom | OnOff, OperationalState |
|
|
237
|
+
| Air Conditioner | Thermostat + Fan | Thermostat, FanControl |
|
|
238
|
+
| Hood | Fan | FanControl, OnOff |
|
|
239
|
+
| Water Heater | Thermostat | Thermostat |
|
|
240
|
+
|
|
241
|
+
## Testing
|
|
242
|
+
|
|
243
|
+
### Verify Matter Support
|
|
244
|
+
|
|
245
|
+
Check Homebridge logs for:
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
[SmartHQ] Matter support: ENABLED - Devices will register as Matter accessories
|
|
249
|
+
[SmartHQ] [Matter] Creating refrigerator: My Fridge
|
|
250
|
+
[SmartHQ] [Matter] ✓ Registered refrigerator: My Fridge
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Test Temperature Control
|
|
254
|
+
|
|
255
|
+
1. Open Matter-compatible app (Apple Home, Google Home, etc.)
|
|
256
|
+
2. Find refrigerator accessory
|
|
257
|
+
3. Adjust target temperature
|
|
258
|
+
4. Verify ERD write in Homebridge logs
|
|
259
|
+
5. Verify temperature updates reflect in app
|
|
260
|
+
|
|
261
|
+
## Troubleshooting
|
|
262
|
+
|
|
263
|
+
### "Matter is not available"
|
|
264
|
+
|
|
265
|
+
- Upgrade to Homebridge 2.0.0-beta.63 or later
|
|
266
|
+
- Check Homebridge UI for Matter settings
|
|
267
|
+
|
|
268
|
+
### "Matter is available but not enabled"
|
|
269
|
+
|
|
270
|
+
- Enable Matter in Homebridge settings page
|
|
271
|
+
- For child bridges, enable in plugin bridge settings
|
|
272
|
+
|
|
273
|
+
### Device registers as HAP instead of Matter
|
|
274
|
+
|
|
275
|
+
- Check `useMatter` device config (if specified)
|
|
276
|
+
- Verify Matter is enabled in Homebridge
|
|
277
|
+
- Check logs for fallback messages
|
|
278
|
+
|
|
279
|
+
### TypeScript compilation errors
|
|
280
|
+
|
|
281
|
+
- Current implementation has type errors due to missing Matter types
|
|
282
|
+
- Plugin will work at runtime when Homebridge 2.0 is installed
|
|
283
|
+
- Types will be resolved when official Homebridge 2.0 types are released
|
|
284
|
+
|
|
285
|
+
## References
|
|
286
|
+
|
|
287
|
+
- [Homebridge Matter Plugin Example](https://github.com/homebridge-plugins/homebridge-matter)
|
|
288
|
+
- [homebridge-switchbot beta-5.0.0 Matter Implementation](https://github.com/OpenWonderLabs/homebridge-switchbot/blob/beta-5.0.0/src/platform-matter.ts)
|
|
289
|
+
- [Matter Specification](https://csa-iot.org/all-solutions/matter/)
|
|
290
|
+
- [Homebridge API Documentation](https://developers.homebridge.io/)
|
|
291
|
+
|
|
292
|
+
## Contributing
|
|
293
|
+
|
|
294
|
+
Contributions are welcome! To add Matter support for a new device:
|
|
295
|
+
|
|
296
|
+
1. Create feature branch from `beta-0.5.0`
|
|
297
|
+
2. Implement Matter device class
|
|
298
|
+
3. Add device creation methods to platform
|
|
299
|
+
4. Test with real hardware if possible
|
|
300
|
+
5. Submit PR to `beta-0.5.0` branch
|
|
301
|
+
|
|
302
|
+
## License
|
|
303
|
+
|
|
304
|
+
ISC License - Copyright (C) 2021-2024, donavanbecker
|
package/README.md
CHANGED
|
@@ -40,3 +40,18 @@ These are the events that are currently supported:
|
|
|
40
40
|
- Filter Maintenance Change Alert
|
|
41
41
|
- Descale Needed Alert
|
|
42
42
|
- Add Water Alert
|
|
43
|
+
|
|
44
|
+
## Contributing
|
|
45
|
+
|
|
46
|
+
This project uses a beta-first workflow for all contributions:
|
|
47
|
+
|
|
48
|
+
- 🎯 **All PRs must target beta branches first**, never the main `latest` branch
|
|
49
|
+
- 🏷️ **Required labels**: Set `patch`, `minor`, or `major` labels before assigning issues to Copilot
|
|
50
|
+
- 🌿 **Current beta branch**: `beta-0.5.0` (active development)
|
|
51
|
+
|
|
52
|
+
For detailed contribution guidelines, see [.github/copilot-instructions.md](.github/copilot-instructions.md).
|
|
53
|
+
|
|
54
|
+
Use the branch helper tool to determine the correct target branch:
|
|
55
|
+
```bash
|
|
56
|
+
.github/scripts/branch-helper.sh
|
|
57
|
+
```
|
package/config.schema.json
CHANGED
|
@@ -71,6 +71,15 @@
|
|
|
71
71
|
"functionBody": "return (model.devices && model.devices[arrayIndices].applianceId);"
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
|
+
"useMatter": {
|
|
75
|
+
"title": "Enable Matter",
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"default": false,
|
|
78
|
+
"description": "If enabled, the device will use Matter for HomeKit integration (if supported).",
|
|
79
|
+
"condition": {
|
|
80
|
+
"functionBody": "return (model.devices && model.devices[arrayIndices].applianceId && !model.options.devices[arrayIndices].hide_device);"
|
|
81
|
+
}
|
|
82
|
+
},
|
|
74
83
|
"firmware": {
|
|
75
84
|
"title": "Firmware Override",
|
|
76
85
|
"type": "string",
|
|
@@ -130,14 +139,13 @@
|
|
|
130
139
|
}
|
|
131
140
|
],
|
|
132
141
|
"condition": {
|
|
133
|
-
"functionBody": "return (model.
|
|
142
|
+
"functionBody": "return (model.devices && model.devices[arrayIndices].applianceId && !model.devices[arrayIndices].hide_device);"
|
|
134
143
|
}
|
|
135
144
|
}
|
|
136
145
|
},
|
|
137
146
|
"required": [
|
|
138
|
-
"
|
|
139
|
-
"configDeviceName"
|
|
140
|
-
"logging"
|
|
147
|
+
"applianceId",
|
|
148
|
+
"configDeviceName"
|
|
141
149
|
]
|
|
142
150
|
}
|
|
143
151
|
},
|
|
@@ -238,6 +246,7 @@
|
|
|
238
246
|
"items": [
|
|
239
247
|
"devices[].configDeviceName",
|
|
240
248
|
"devices[].applianceId",
|
|
249
|
+
"devices[].useMatter",
|
|
241
250
|
"devices[].hide_device",
|
|
242
251
|
"devices[].firmware",
|
|
243
252
|
"devices[].external",
|
|
@@ -281,4 +290,4 @@
|
|
|
281
290
|
]
|
|
282
291
|
}
|
|
283
292
|
]
|
|
284
|
-
}
|
|
293
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalDescaleSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,qBAAsB,SAAQ,cAAc;IAChD,OAAO,EAAE,OAAO,CAAA;IAChB,uBAAuB,EAAE,MAAM,EAAE,CAA8F;IAC/H,WAAW,EAAE,MAAM,CAAiB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IAEvC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAI;gBAEtB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAO5C,gBAAgB;
|
|
1
|
+
{"version":3,"file":"OpalDescaleSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,qBAAsB,SAAQ,cAAc;IAChD,OAAO,EAAE,OAAO,CAAA;IAChB,uBAAuB,EAAE,MAAM,EAAE,CAA8F;IAC/H,WAAW,EAAE,MAAM,CAAiB;IAC3C,OAAO,CAAC,cAAc,CAAiB;IAEvC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAI;gBAEtB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAO5C,gBAAgB;IAOtB,oBAAoB,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;IAMvC,OAAO,CAAC,aAAa;IA+BrB,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -12,7 +12,9 @@ export class OpalDescaleSvcManager extends OpalDeviceBase {
|
|
|
12
12
|
}
|
|
13
13
|
async getDescaleStatus() {
|
|
14
14
|
const currentDescaleStatus = await this.readErd(ERD_TYPES.OIM_NEEDS_DESCALING);
|
|
15
|
-
|
|
15
|
+
if (currentDescaleStatus) {
|
|
16
|
+
this.setOpalDescaleStatus(Number.parseInt(currentDescaleStatus));
|
|
17
|
+
}
|
|
16
18
|
}
|
|
17
19
|
setOpalDescaleStatus(updateValue) {
|
|
18
20
|
this.descaleStatus = updateValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalDescaleSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAChD,OAAO,CAAS;IAChB,uBAAuB,GAAa,CAAC,yFAAyF,CAAC,CAAA;IAC/H,WAAW,GAAW,cAAc,CAAA;IACnC,cAAc,GAAG,cAAc,CAAA;IAEvC,aAAa,GAAU,CAAC,CAAA;IACxB,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC9E,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAU,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"OpalDescaleSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalDescaleSvcManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IAChD,OAAO,CAAS;IAChB,uBAAuB,GAAa,CAAC,yFAAyF,CAAC,CAAA;IAC/H,WAAW,GAAW,cAAc,CAAA;IACnC,cAAc,GAAG,cAAc,CAAA;IAEvC,aAAa,GAAU,CAAC,CAAA;IACxB,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAA;QAC9E,IAAI,oBAAoB,EAAE,CAAC;YACzB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAU,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,WAAkB;QACrC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAA;QAChC,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC3G,CAAC;IAEO,aAAa;QACnB,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnE,uCAAuC;QACvC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;QAEtH,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aAC9D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;aAChC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAEhC,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aACtE,KAAK,CAAC,GAAG,EAAE;YACV,OAAO,IAAI,CAAC,aAAa,CAAA;QAC3B,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,aAAa,EAAE,CAAC;gBACzK,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,6BAA6B,CAAA;gBAChG,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalFilterMaintenanceSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAA4B;IACtD,OAAO,CAAC,cAAc,CAAuB;IACtC,uBAAuB,EAAE,MAAM,EAAE,CAAmH;IAE3J,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAI;gBAEhC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAO5C,0BAA0B;
|
|
1
|
+
{"version":3,"file":"OpalFilterMaintenanceSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC5C,OAAO,EAAa,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE5D,qBAAa,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAA4B;IACtD,OAAO,CAAC,cAAc,CAAuB;IACtC,uBAAuB,EAAE,MAAM,EAAE,CAAmH;IAE3J,uBAAuB,EAAE,CAAC,GAAG,CAAC,CAAI;gBAEhC,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAO5C,0BAA0B;IAOhC,0BAA0B,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC;IAM7C,OAAO,CAAC,aAAa;IA+BrB,UAAU,IAAI,OAAO;CAGtB"}
|
|
@@ -12,7 +12,9 @@ export class OpalFilterMaintenanceSvcManager extends OpalDeviceBase {
|
|
|
12
12
|
}
|
|
13
13
|
async getFilterMaintenanceStatus() {
|
|
14
14
|
const currentFilterStatus = await this.readErd(ERD_TYPES.OIM_FILTER_STATUS);
|
|
15
|
-
|
|
15
|
+
if (currentFilterStatus) {
|
|
16
|
+
this.setFilterMaintenanceStatus(Number.parseInt(currentFilterStatus));
|
|
17
|
+
}
|
|
16
18
|
}
|
|
17
19
|
setFilterMaintenanceStatus(updateValue) {
|
|
18
20
|
this.filterMaintenanceStatus = updateValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalFilterMaintenanceSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,OAAO,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,CAAS;IAChB,WAAW,GAAW,yBAAyB,CAAA;IAC9C,cAAc,GAAG,oBAAoB,CAAA;IACtC,uBAAuB,GAAa,CAAC,8GAA8G,CAAC,CAAA;IAE3J,uBAAuB,GAAU,CAAC,CAAA;IAClC,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3E,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAU,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"OpalFilterMaintenanceSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalFilterMaintenanceSvcManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD,MAAM,OAAO,+BAAgC,SAAQ,cAAc;IAC1D,OAAO,CAAS;IAChB,WAAW,GAAW,yBAAyB,CAAA;IAC9C,cAAc,GAAG,oBAAoB,CAAA;IACtC,uBAAuB,GAAa,CAAC,8GAA8G,CAAC,CAAA;IAE3J,uBAAuB,GAAU,CAAC,CAAA;IAClC,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,KAAK,CAAC,0BAA0B;QAC9B,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QAC3E,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAU,CAAC,CAAA;QAChF,CAAC;IACH,CAAC;IAED,0BAA0B,CAAC,WAAkB;QAC3C,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAA;QAC1C,sDAAsD;QACtD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC3G,CAAC;IAEO,aAAa;QACnB,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnE,uCAAuC;QACvC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,2BAA2B,CAAC,CAAA;QAEjI,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aAC9D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;aAChC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAEhC,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC;aACtE,KAAK,CAAC,GAAG,EAAE;YACV,OAAO,IAAI,CAAC,uBAAuB,CAAA;QACrC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,aAAa,EAAE,CAAC;gBACzK,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,uCAAuC,CAAA;gBAC1G,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAA;gBAChE,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEJ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF"}
|
|
@@ -24,7 +24,7 @@ export class OpalPowerSvcManager extends OpalDeviceBase {
|
|
|
24
24
|
.setValue(this.configuredName);
|
|
25
25
|
service
|
|
26
26
|
.getCharacteristic(this.platform.Characteristic.On)
|
|
27
|
-
.onGet(() => this.readErd(ERD_TYPES.OIM_POWER).then(r => Number.parseInt(r) !== 0))
|
|
27
|
+
.onGet(() => this.readErd(ERD_TYPES.OIM_POWER).then(r => r ? Number.parseInt(r) !== 0 : false))
|
|
28
28
|
.onSet(value => this.writeErd(ERD_TYPES.OIM_POWER, value));
|
|
29
29
|
return service;
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalPowerSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalPowerSvcManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IAC9C,OAAO,CAAS;IACf,WAAW,GAAG,YAAY,CAAA;IAC1B,cAAc,GAAG,OAAO,CAAA;IACzB,uBAAuB,GAAa,CAAC,0HAA0H,CAAC,CAAA;IAEvK,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,aAAa;QACX,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnE,uCAAuC;QACvC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QACvG,OAAO,CAAC,iBAAiB,EAAE,CAAA;QAC3B,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aAC9D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;aAChC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAChC,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAClD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"OpalPowerSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalPowerSvcManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IAC9C,OAAO,CAAS;IACf,WAAW,GAAG,YAAY,CAAA;IAC1B,cAAc,GAAG,OAAO,CAAA;IACzB,uBAAuB,GAAa,CAAC,0HAA0H,CAAC,CAAA;IAEvK,YACE,QAAyB,EACzB,SAA4C,EAC5C,MAAgD;QAEhD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IACrC,CAAC;IAED,aAAa;QACX,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEnE,uCAAuC;QACvC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QACvG,OAAO,CAAC,iBAAiB,EAAE,CAAA;QAC3B,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;aAC9D,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC;aAChC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAChC,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aAClD,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC9F,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,KAAgB,CAAC,CAAC,CAAA;QAEvE,OAAO,OAAO,CAAA;IAEhB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAEM,iBAAiB,CAAC,aAAsB;QAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC5B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC/B,aAAa,CACd,CAAA;IACH,CAAC;IAEM,iBAAiB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CACnC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAChC,CAAC,KAAK,CAAA;IACT,CAAC;IAEM,iCAAiC,CAAC,sBAA8B;QACrE,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,mBAAmB,IAAI,sBAAsB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3J,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uCAAuC,sBAAsB,cAAc,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAA;QACnK,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { devicesConfig, SmartHqContext, SmartHQPlatform } from '../../../index.js';
|
|
1
2
|
import type { PlatformAccessory, Service } from 'homebridge';
|
|
2
|
-
import type { SmartHQPlatform, devicesConfig, SmartHqContext } from '../../../index.js';
|
|
3
3
|
import { OpalDeviceBase } from '../OpalDeviceBase.js';
|
|
4
4
|
export declare class OpalProgressSvcManager extends OpalDeviceBase {
|
|
5
5
|
readonly platform: SmartHQPlatform;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalProgressSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"OpalProgressSvcManager.d.ts","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAIxD,qBAAa,sBAAuB,SAAQ,cAAc;IAWtD,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAZpD,uBAAuB,EAAE,MAAM,EAAE,CAGvC;IAEM,WAAW,EAAE,MAAM,CAAkB;IACrC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAO;IACrC,OAAO,CAAC,cAAc,CAAiB;gBAG5B,QAAQ,EAAE,eAAe,EAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAgB3D,OAAO,CAAC,aAAa;IA8CrB,UAAU,IAAI,OAAO;IAIR,yBAAyB;YAuBxB,kBAAkB;CAwBjC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
|
-
import { ERD_TYPES } from '../../../index.js';
|
|
3
2
|
import { OpalDeviceBase } from '../OpalDeviceBase.js';
|
|
3
|
+
import { ERD_TYPES } from '../../../index.js';
|
|
4
4
|
export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
5
5
|
platform;
|
|
6
6
|
accessory;
|
|
7
7
|
device;
|
|
8
8
|
advancedOptionQueryStrs = [
|
|
9
9
|
'device=opal&label=Production_Duration_Minutes&indicator=opalProductionLimit&type=number&defaultValue=0&placeholder=Number._0_for_Infinite',
|
|
10
|
-
'device=opal&label=HKC_Progress_Complete_Notification_Path&indicator=oplHKCProgressCompleteNotificationPath'
|
|
10
|
+
'device=opal&label=HKC_Progress_Complete_Notification_Path&indicator=oplHKCProgressCompleteNotificationPath',
|
|
11
11
|
];
|
|
12
12
|
serviceName = 'Opal Progress';
|
|
13
13
|
service = null;
|
|
@@ -45,7 +45,7 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
45
45
|
// Configure Active characteristic
|
|
46
46
|
this.service.getCharacteristic(this.platform.Characteristic.Active)
|
|
47
47
|
.setProps({
|
|
48
|
-
perms: [
|
|
48
|
+
perms: ['ev', 'pr'],
|
|
49
49
|
});
|
|
50
50
|
// Configure RotationSpeed characteristic
|
|
51
51
|
this.service.getCharacteristic(this.platform.Characteristic.RotationSpeed)
|
|
@@ -55,7 +55,7 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
55
55
|
minStep: 1,
|
|
56
56
|
minValue: 0,
|
|
57
57
|
maxValue: 100,
|
|
58
|
-
perms: [
|
|
58
|
+
perms: ['ev', 'pr'],
|
|
59
59
|
})
|
|
60
60
|
.removeOnGet()
|
|
61
61
|
.removeOnSet()
|
|
@@ -89,10 +89,17 @@ export class OpalProgressSvcManager extends OpalDeviceBase {
|
|
|
89
89
|
async getProductionValue() {
|
|
90
90
|
try {
|
|
91
91
|
const erdVal = await this.readErd(ERD_TYPES.OIM_PRODUCTION);
|
|
92
|
+
if (!erdVal) {
|
|
93
|
+
return [0, 0];
|
|
94
|
+
}
|
|
92
95
|
const productionValueMinutes = Buffer.from(erdVal, 'hex').readUInt8(0);
|
|
93
96
|
const completionistMsg = productionValueMinutes > 100 ? `, Completion: ${productionValueMinutes}` : '';
|
|
94
97
|
this.platform.debugSuccessLog(`Production: ${productionValueMinutes}, Limit: ${this.platform.config.deviceOptions?.opal?.opalProductionLimit}${completionistMsg}`);
|
|
95
|
-
const
|
|
98
|
+
const opalProductionLimit = this.platform.config.deviceOptions?.opal?.opalProductionLimit;
|
|
99
|
+
let productionValueProgressBar = 0;
|
|
100
|
+
if (typeof opalProductionLimit === 'number' && opalProductionLimit > 0) {
|
|
101
|
+
productionValueProgressBar = Math.floor((100 / opalProductionLimit) * productionValueMinutes);
|
|
102
|
+
}
|
|
96
103
|
return [productionValueProgressBar, productionValueMinutes];
|
|
97
104
|
}
|
|
98
105
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalProgressSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"OpalProgressSvcManager.js","sourceRoot":"","sources":["../../../../src/devices/OpalIceMaker/Managers/OpalProgressSvcManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalStatusBase.d.ts","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,cAAe,SAAQ,cAAc;IAgB9C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAjBpD,eAAe;;;;;;;;;;;MAWrB;IACM,iBAAiB,EAAE,MAAM,CAA4B;gBAGjD,QAAQ,EAAE,eAAe,EAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAKrD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"OpalStatusBase.d.ts","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,qBAAa,cAAe,SAAQ,cAAc;IAgB9C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAjBpD,eAAe;;;;;;;;;;;MAWrB;IACM,iBAAiB,EAAE,MAAM,CAA4B;gBAGjD,QAAQ,EAAE,eAAe,EAC3B,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC1C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAKrD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,cAAc,IAAI,IAAI;CAGvB"}
|
|
@@ -25,8 +25,10 @@ export class OpalStatusBase extends OpalDeviceBase {
|
|
|
25
25
|
}
|
|
26
26
|
async getOpalCurrentStatus() {
|
|
27
27
|
const rawStatusResponse = await this.readErd(ERD_TYPES.OIM_STATUS);
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if (rawStatusResponse) {
|
|
29
|
+
const opalIceMakerStatus = Number.parseInt(rawStatusResponse);
|
|
30
|
+
this.setOpalCurrentStatus(opalIceMakerStatus);
|
|
31
|
+
}
|
|
30
32
|
}
|
|
31
33
|
async setOpalCurrentStatus(newStatus) {
|
|
32
34
|
this.opalCurrentStatus = newStatus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalStatusBase.js","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,cAAe,SAAQ,cAAc;IAgBrC;IACF;IACE;IAjBJ,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC;QACP,oBAAoB,EAAE,CAAC;QACvB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,GAAG;KACb,CAAA;IACM,iBAAiB,GAAW,IAAI,CAAC,eAAe,CAAC,IAAI,CAAA;IAE5D,YACW,QAAyB,EAC3B,SAA4C,EAC1C,MAAgD;QAEzD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAJzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3B,cAAS,GAAT,SAAS,CAAmC;QAC1C,WAAM,GAAN,MAAM,CAA0C;IAG3D,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAClE,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"OpalStatusBase.js","sourceRoot":"","sources":["../../../../../src/devices/OpalIceMaker/Managers/StatusManagers/OpalStatusBase.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,OAAO,cAAe,SAAQ,cAAc;IAgBrC;IACF;IACE;IAjBJ,eAAe,GAAG;QACvB,UAAU,EAAE,CAAC;QACb,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;QACX,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;QACZ,eAAe,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC;QACP,oBAAoB,EAAE,CAAC;QACvB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,GAAG;KACb,CAAA;IACM,iBAAiB,GAAW,IAAI,CAAC,eAAe,CAAC,IAAI,CAAA;IAE5D,YACW,QAAyB,EAC3B,SAA4C,EAC1C,MAAgD;QAEzD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAJzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3B,cAAS,GAAT,SAAS,CAAmC;QAC1C,WAAM,GAAN,MAAM,CAA0C;IAG3D,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAClE,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;YAC7D,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QAC1C,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;QAClC,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAED,6CAA6C;IAC7C,cAAc;QACZ,sCAAsC;IACxC,CAAC;CACF"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
+
import type { devicesConfig, SmartHqContext, SmartHQPlatform } from '../../index.js';
|
|
1
2
|
import type { PlatformAccessory } from 'homebridge';
|
|
2
|
-
import
|
|
3
|
-
export declare class OpalDeviceBase {
|
|
3
|
+
import { deviceBase } from '../device.js';
|
|
4
|
+
export declare class OpalDeviceBase extends deviceBase {
|
|
4
5
|
readonly platform: SmartHQPlatform;
|
|
5
6
|
protected accessory: PlatformAccessory<SmartHqContext>;
|
|
6
7
|
readonly device: SmartHqContext['device'] & devicesConfig;
|
|
7
8
|
private hkcControllerNotificationsSecret?;
|
|
8
9
|
constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
|
|
9
|
-
readErd(erd: string): Promise<string>;
|
|
10
|
-
writeErd(erd: string, value: string | boolean): Promise<undefined>;
|
|
11
10
|
sendHomeKitControllerNotification(hkcNotificationPath: string): Promise<void>;
|
|
12
11
|
}
|
|
13
12
|
//# sourceMappingURL=OpalDeviceBase.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpalDeviceBase.d.ts","sourceRoot":"","sources":["../../../src/devices/OpalIceMaker/OpalDeviceBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"OpalDeviceBase.d.ts","sourceRoot":"","sources":["../../../src/devices/OpalIceMaker/OpalDeviceBase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AAC3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAInD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,qBAAa,cAAe,SAAQ,UAAU;IAG1C,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAClC,SAAS,CAAC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAJ3D,OAAO,CAAC,gCAAgC,CAAC,CAAQ;gBAEtC,QAAQ,EAAE,eAAe,EACxB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC7C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IAMrD,iCAAiC,CAAC,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUpF"}
|
|
@@ -1,32 +1,17 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
|
|
2
|
+
import { deviceBase } from '../device.js';
|
|
3
|
+
export class OpalDeviceBase extends deviceBase {
|
|
3
4
|
platform;
|
|
4
5
|
accessory;
|
|
5
6
|
device;
|
|
6
7
|
hkcControllerNotificationsSecret;
|
|
7
8
|
constructor(platform, accessory, device) {
|
|
9
|
+
super(platform, accessory, device);
|
|
8
10
|
this.platform = platform;
|
|
9
11
|
this.accessory = accessory;
|
|
10
12
|
this.device = device;
|
|
11
13
|
this.hkcControllerNotificationsSecret = this.platform.config.options?.homekitControllerNotificationsSecret;
|
|
12
14
|
}
|
|
13
|
-
// Shared utility methods
|
|
14
|
-
async readErd(erd) {
|
|
15
|
-
const d = await axios
|
|
16
|
-
.get(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`);
|
|
17
|
-
return String(d.data.value);
|
|
18
|
-
}
|
|
19
|
-
async writeErd(erd, value) {
|
|
20
|
-
await axios
|
|
21
|
-
.post(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`, {
|
|
22
|
-
kind: 'appliance#erdListEntry',
|
|
23
|
-
userId: this.accessory.context.userId,
|
|
24
|
-
applianceId: this.accessory.context.device.applianceId,
|
|
25
|
-
erd,
|
|
26
|
-
value: typeof value === 'boolean' ? (value ? '01' : '00') : value,
|
|
27
|
-
});
|
|
28
|
-
return undefined;
|
|
29
|
-
}
|
|
30
15
|
async sendHomeKitControllerNotification(hkcNotificationPath) {
|
|
31
16
|
if (this.hkcControllerNotificationsSecret) {
|
|
32
17
|
try {
|