@homebridge-plugins/homebridge-august 3.2.3 → 3.3.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 (52) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/CLAUDE.md +48 -0
  3. package/README.md +39 -27
  4. package/config.schema.json +47 -3
  5. package/dist/Platform.HAP.d.ts.map +1 -1
  6. package/dist/Platform.HAP.js +1 -2
  7. package/dist/Platform.HAP.js.map +1 -1
  8. package/dist/connectivity-manager.d.ts.map +1 -1
  9. package/dist/connectivity-manager.js.map +1 -1
  10. package/dist/platform.matter.d.ts +6 -0
  11. package/dist/platform.matter.d.ts.map +1 -1
  12. package/dist/platform.matter.js +15 -2
  13. package/dist/platform.matter.js.map +1 -1
  14. package/dist/settings.d.ts +1 -0
  15. package/dist/settings.d.ts.map +1 -1
  16. package/package.json +37 -31
  17. package/test/connectivity-manager.test.ts +25 -23
  18. package/.github/FUNDING.yml +0 -4
  19. package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -97
  20. package/.github/ISSUE_TEMPLATE/config.yml +0 -8
  21. package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -38
  22. package/.github/ISSUE_TEMPLATE/support-request.yml +0 -85
  23. package/.github/ISSUE_TEMPLATE.md +0 -48
  24. package/.github/PULL_REQUEST_TEMPLATE/pull_request.md +0 -27
  25. package/.github/copilot-instructions.md +0 -200
  26. package/.github/dependabot.yml +0 -17
  27. package/.github/labeler.yml +0 -38
  28. package/.github/scripts/compute-version-override.cjs +0 -51
  29. package/.github/scripts/normalize-changelog-header.cjs +0 -86
  30. package/.github/scripts/npm-version-script-esm-auto.js +0 -201
  31. package/.github/scripts/resolve-version-bump-esm.js +0 -118
  32. package/.github/workflows/release.yml +0 -169
  33. package/.github/workflows/stale.yml +0 -12
  34. package/SECURITY.md +0 -19
  35. package/branding/Homebridge_x_August.svg +0 -32
  36. package/branding/icon.png +0 -0
  37. package/dist/package.json +0 -84
  38. package/docs/.nojekyll +0 -1
  39. package/docs/assets/hierarchy.js +0 -1
  40. package/docs/assets/highlight.css +0 -22
  41. package/docs/assets/icons.js +0 -18
  42. package/docs/assets/icons.svg +0 -1
  43. package/docs/assets/main.js +0 -60
  44. package/docs/assets/navigation.js +0 -1
  45. package/docs/assets/search.js +0 -1
  46. package/docs/assets/style.css +0 -1633
  47. package/docs/hierarchy.html +0 -1
  48. package/docs/index.html +0 -44
  49. package/docs/modules.html +0 -1
  50. package/docs/variables/default.html +0 -1
  51. package/eslint.config.js +0 -47
  52. package/vitest.config.ts +0 -8
package/package.json CHANGED
@@ -2,21 +2,31 @@
2
2
  "name": "@homebridge-plugins/homebridge-august",
3
3
  "displayName": "August",
4
4
  "type": "module",
5
- "version": "3.2.3",
5
+ "version": "3.3.0-beta.1",
6
6
  "description": "The August plugin allows you to access your August & Yale device(s) from HomeKit.",
7
7
  "author": {
8
- "name": "donavanbecker",
9
- "url": "https://github.com/donavanbecker"
8
+ "name": "bwp91",
9
+ "email": "bwp91@icloud.com"
10
10
  },
11
+ "contributors": [
12
+ {
13
+ "name": "donavanbecker",
14
+ "url": "https://github.com/donavanbecker"
15
+ }
16
+ ],
11
17
  "license": "ISC",
12
18
  "funding": [
13
19
  {
14
- "type": "Paypal",
15
- "url": "https://paypal.me/donavanbecker"
20
+ "type": "github",
21
+ "url": "https://github.com/sponsors/bwp91"
16
22
  },
17
23
  {
18
- "type": "GitHub",
19
- "url": "https://github.com/sponsors/donavanbecker"
24
+ "type": "kofi",
25
+ "url": "https://ko-fi.com/bwp91"
26
+ },
27
+ {
28
+ "type": "paypal",
29
+ "url": "https://www.paypal.me/BenPotter"
20
30
  }
21
31
  ],
22
32
  "homepage": "https://github.com/homebridge-plugins/homebridge-august",
@@ -39,18 +49,15 @@
39
49
  "main": "dist/index.js",
40
50
  "engines": {
41
51
  "homebridge": "^2.0.0",
42
- "node": "^22 || ^24"
52
+ "node": "^22.12.0 || ^24.0.0"
43
53
  },
44
54
  "scripts": {
45
- "check": "npm install && npm outdated",
46
- "lint": "eslint src --no-warn-ignored",
47
- "lint:fix": "eslint src --fix --no-warn-ignored",
48
- "watch": "npm run build && npm run plugin-ui && npm link && nodemon",
55
+ "lint": "eslint . --max-warnings=0",
56
+ "lint:fix": "npm run lint -- --fix",
57
+ "watch": "npm run build && npm link && nodemon",
49
58
  "plugin-ui": "rsync ./src/homebridge-ui/public/index.html ./dist/homebridge-ui/public/",
50
- "build": "npm run clean && tsc && npm run plugin-ui && cp package.json dist/package.json || true",
51
- "prepublishOnly": "npm run lint && npm run build && npm run plugin-ui && npm run docs && npm run docs:lint",
52
- "postpublish": "npm run clean && npm ci",
53
- "clean": "shx rm -rf ./dist",
59
+ "build": "rimraf ./dist && tsc && npm run plugin-ui",
60
+ "prepublishOnly": "npm run lint && npm run build",
54
61
  "test": "vitest run",
55
62
  "test:watch": "vitest watch",
56
63
  "test-coverage": "npm run test -- --coverage",
@@ -61,24 +68,23 @@
61
68
  "access": "public"
62
69
  },
63
70
  "dependencies": {
64
- "@homebridge/plugin-ui-utils": "^2.2.3",
65
- "august-yale": "^1.2.2",
71
+ "@homebridge/plugin-ui-utils": "^2.2.5",
72
+ "august-yale": "1.2.3-beta.0",
66
73
  "rxjs": "^7.8.2"
67
74
  },
68
75
  "devDependencies": {
69
- "@antfu/eslint-config": "^8.2.0",
70
- "@types/node": "^25.6.0",
71
- "@vitest/coverage-v8": "^4.1.5",
72
- "eslint": "^10.3.0",
73
- "eslint-plugin-format": "^2.0.1",
74
- "eslint-plugin-html": "^8.1.4",
75
- "eslint-plugin-perfectionist": "^5.8.0",
76
- "eslint-plugin-unused-imports": "^4.4.1",
77
- "homebridge": "^2.0.0",
76
+ "@antfu/eslint-config": "^9.1.0",
77
+ "@types/node": "^26.1.1",
78
+ "@vitest/coverage-v8": "^4.1.10",
79
+ "homebridge": "^2.1.1",
78
80
  "nodemon": "^3.1.14",
79
- "shx": "^0.4.0",
80
- "typedoc": "^0.28.19",
81
+ "rimraf": "^6.1.3",
82
+ "ts-node": "^10.9.2",
83
+ "typedoc": "^0.28.20",
81
84
  "typescript": "^6.0.3",
82
- "vitest": "^4.1.5"
85
+ "vitest": "^4.1.10"
86
+ },
87
+ "allowScripts": {
88
+ "fsevents@2.3.3": true
83
89
  }
84
- }
90
+ }
@@ -88,7 +88,7 @@ vi.mock('august-yale', () => {
88
88
  // Helper: build a stub Logging object that records calls.
89
89
  function makeLog(): Logging & { _calls: { level: string, msg: string }[] } {
90
90
  const calls: { level: string, msg: string }[] = []
91
- const stub = ((..._args: any[]) => {}) as any
91
+ const stub = (() => {}) as any
92
92
  stub._calls = calls
93
93
  for (const level of ['info', 'warn', 'error', 'debug', 'success'] as const) {
94
94
  stub[level] = (msg: string) => calls.push({ level, msg })
@@ -101,7 +101,7 @@ async function fakeCredentials(): Promise<credentials> {
101
101
  return { installId: 'test-install', apiKey: 'test-key' } as unknown as credentials
102
102
  }
103
103
 
104
- describe('ConnectivityManager', () => {
104
+ describe('connectivityManager', () => {
105
105
  beforeEach(() => {
106
106
  // Use fake timers so probes can be advanced deterministically without
107
107
  // waiting for real backoff windows (5s..5min).
@@ -187,7 +187,7 @@ describe('ConnectivityManager', () => {
187
187
  await m.init()
188
188
  const transientErr = Object.assign(new Error('Unprocessable Entity'), { statusCode: 422 })
189
189
  await expect(
190
- m.execute('test', async () => { throw transientErr }),
190
+ m.execute('test', async () => Promise.reject(transientErr)),
191
191
  ).rejects.toBe(transientErr)
192
192
  expect(m.getState()).toBe('healthy')
193
193
  })
@@ -209,7 +209,7 @@ describe('ConnectivityManager', () => {
209
209
  await m.init()
210
210
  expect(onClientChanged).toHaveBeenCalledTimes(1)
211
211
  const authErr = Object.assign(new Error('Unauthorized'), { statusCode: 401 })
212
- const result = await m.execute('test', async () => { throw authErr })
212
+ const result = await m.execute('test', async () => Promise.reject(authErr))
213
213
  expect(result).toBeUndefined()
214
214
  // Allow the rebuild promise to resolve.
215
215
  await vi.runAllTimersAsync()
@@ -221,7 +221,7 @@ describe('ConnectivityManager', () => {
221
221
  const m = new ConnectivityManager(makeLog(), fakeCredentials)
222
222
  await m.init()
223
223
  const { TimeoutError } = await import('august-yale')
224
- const result = await m.execute('test', async () => { throw new TimeoutError('timed out') })
224
+ const result = await m.execute('test', async () => Promise.reject(new TimeoutError('timed out')))
225
225
  expect(result).toBeUndefined()
226
226
  expect(m.getState()).toBe('degraded')
227
227
  })
@@ -233,7 +233,7 @@ describe('ConnectivityManager', () => {
233
233
  const m = new ConnectivityManager(makeLog(), fakeCredentials)
234
234
  await m.init()
235
235
  const { NetworkError } = await import('august-yale')
236
- const result = await m.execute('test', async () => { throw new NetworkError('socket hang up', undefined, 'ECONNRESET') })
236
+ const result = await m.execute('test', async () => Promise.reject(new NetworkError('socket hang up', undefined, 'ECONNRESET')))
237
237
  expect(result).toBeUndefined()
238
238
  expect(m.getState()).toBe('degraded')
239
239
  })
@@ -244,7 +244,7 @@ describe('ConnectivityManager', () => {
244
244
  await m.init()
245
245
  expect(onClientChanged).toHaveBeenCalledTimes(1)
246
246
  const { InvalidAuth } = await import('august-yale')
247
- const result = await m.execute('test', async () => { throw new InvalidAuth('session expired') })
247
+ const result = await m.execute('test', async () => Promise.reject(new InvalidAuth('session expired')))
248
248
  expect(result).toBeUndefined()
249
249
  await vi.runAllTimersAsync()
250
250
  expect(onClientChanged).toHaveBeenCalledTimes(2)
@@ -262,7 +262,7 @@ describe('ConnectivityManager', () => {
262
262
  const { AbortedError } = await import('august-yale')
263
263
  const err = new AbortedError('client destroyed', undefined, 'UND_ERR_DESTROYED')
264
264
  await expect(
265
- m.execute('test', async () => { throw err }),
265
+ m.execute('test', async () => Promise.reject(err)),
266
266
  ).rejects.toBe(err)
267
267
  // State stays healthy — no probe scheduled.
268
268
  expect(m.getState()).toBe('healthy')
@@ -275,7 +275,7 @@ describe('ConnectivityManager', () => {
275
275
  const m = new ConnectivityManager(makeLog(), fakeCredentials)
276
276
  await m.init()
277
277
  const err = Object.assign(new Error('Bad Gateway'), { statusCode: 502 })
278
- await m.execute('test', async () => { throw err })
278
+ await m.execute('test', async () => Promise.reject(err))
279
279
  expect(m.getState()).toBe('degraded')
280
280
  })
281
281
  })
@@ -289,7 +289,7 @@ describe('ConnectivityManager', () => {
289
289
 
290
290
  // Network failure: degrades and schedules probe.
291
291
  const { TimeoutError } = await import('august-yale')
292
- await m.execute('test', async () => { throw new TimeoutError('boom') })
292
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
293
293
  expect(m.getState()).toBe('degraded')
294
294
 
295
295
  // Probe calls resetTransport() on the existing client and then its
@@ -320,7 +320,7 @@ describe('ConnectivityManager', () => {
320
320
  }))
321
321
 
322
322
  // Trigger degraded.
323
- await m.execute('test', async () => { throw new TimeoutError('boom') })
323
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
324
324
  expect(m.getState()).toBe('degraded')
325
325
 
326
326
  // Advance past first backoff + probe timeout.
@@ -345,7 +345,7 @@ describe('ConnectivityManager', () => {
345
345
  const m = new ConnectivityManager(makeLog(), fakeCredentials)
346
346
  await m.init()
347
347
  const { TimeoutError } = await import('august-yale')
348
- await m.execute('test', async () => { throw new TimeoutError('blip') })
348
+ await m.execute('test', async () => Promise.reject(new TimeoutError('blip')))
349
349
  expect(m.getState()).toBe('degraded')
350
350
  // Next call succeeds.
351
351
  const result = await m.execute('test', async () => 'recovered')
@@ -372,7 +372,7 @@ describe('ConnectivityManager', () => {
372
372
 
373
373
  // Trigger degraded.
374
374
  const { TimeoutError } = await import('august-yale')
375
- await m.execute('test', async () => { throw new TimeoutError('boom') })
375
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
376
376
  expect(m.getState()).toBe('degraded')
377
377
 
378
378
  // Advance past the first backoff: probe runs, default mock has
@@ -406,7 +406,7 @@ describe('ConnectivityManager', () => {
406
406
  ))
407
407
 
408
408
  // Trigger degraded.
409
- await m.execute('test', async () => { throw new TimeoutError('boom') })
409
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
410
410
  expect(m.getState()).toBe('degraded')
411
411
 
412
412
  // Advance past first probe → offline.
@@ -429,7 +429,7 @@ describe('ConnectivityManager', () => {
429
429
  await m.init()
430
430
 
431
431
  const { TimeoutError } = await import('august-yale')
432
- await m.execute('test', async () => { throw new TimeoutError('boom') })
432
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
433
433
  expect(m.getState()).toBe('degraded')
434
434
 
435
435
  // PubNub reconnect → immediate probe. Default mock has .locks()
@@ -471,8 +471,8 @@ describe('ConnectivityManager', () => {
471
471
  // Fire two execute()s concurrently — each will see a 401, each will
472
472
  // request a rebuild. The manager must coalesce these into one rebuild.
473
473
  await Promise.all([
474
- m.execute('a', async () => { throw authErr }),
475
- m.execute('b', async () => { throw authErr }),
474
+ m.execute('a', async () => Promise.reject(authErr)),
475
+ m.execute('b', async () => Promise.reject(authErr)),
476
476
  ])
477
477
  await vi.runAllTimersAsync()
478
478
 
@@ -489,14 +489,14 @@ describe('ConnectivityManager', () => {
489
489
  m.onStateChange(listener)
490
490
 
491
491
  const { TimeoutError } = await import('august-yale')
492
- await m.execute('test', async () => { throw new TimeoutError('boom') })
492
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
493
493
  // healthy -> degraded fires once.
494
494
  expect(listener).toHaveBeenCalledWith('degraded', 'healthy')
495
495
  expect(listener).toHaveBeenCalledTimes(1)
496
496
 
497
497
  // A second network error while already degraded should NOT fire
498
498
  // again (no transition).
499
- await m.execute('test', async () => { throw new TimeoutError('boom') })
499
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
500
500
  expect(listener).toHaveBeenCalledTimes(1)
501
501
  })
502
502
 
@@ -508,7 +508,7 @@ describe('ConnectivityManager', () => {
508
508
  unsubscribe()
509
509
 
510
510
  const { TimeoutError } = await import('august-yale')
511
- await m.execute('test', async () => { throw new TimeoutError('boom') })
511
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
512
512
  expect(listener).not.toHaveBeenCalled()
513
513
  })
514
514
 
@@ -516,11 +516,13 @@ describe('ConnectivityManager', () => {
516
516
  const m = new ConnectivityManager(makeLog(), fakeCredentials)
517
517
  await m.init()
518
518
  const good = vi.fn()
519
- m.onStateChange(() => { throw new Error('listener bug') })
519
+ m.onStateChange(() => {
520
+ throw new Error('listener bug')
521
+ })
520
522
  m.onStateChange(good)
521
523
 
522
524
  const { TimeoutError } = await import('august-yale')
523
- await m.execute('test', async () => { throw new TimeoutError('boom') })
525
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
524
526
  expect(good).toHaveBeenCalledTimes(1)
525
527
  })
526
528
  })
@@ -544,7 +546,7 @@ describe('ConnectivityManager', () => {
544
546
  ))
545
547
 
546
548
  // Trigger degraded.
547
- await m.execute('test', async () => { throw new TimeoutError('boom') })
549
+ await m.execute('test', async () => Promise.reject(new TimeoutError('boom')))
548
550
 
549
551
  // Drive past first probe so we land in offline.
550
552
  await vi.advanceTimersByTimeAsync(15_000)
@@ -1,4 +0,0 @@
1
- # These are supported funding model platforms
2
-
3
- github: donavanbecker
4
- custom: paypal.me/DonavanBecker
@@ -1,97 +0,0 @@
1
- name: Bug-Report
2
- description: Report a Bug to help us improve
3
- title: "Bug:"
4
- labels: [bug]
5
- assignees: 'donavanbecker'
6
- body:
7
- - type: markdown
8
- attributes:
9
- value: |
10
- You must use the issue template below when submitting a bug.
11
- - type: input
12
- attributes:
13
- label: Describe The Bug
14
- placeholder: A clear and concise description of what the bug is.
15
- validations:
16
- required: true
17
- - type: input
18
- attributes:
19
- label: To Reproduce
20
- placeholder: Steps to reproduce the behavior.
21
- validations:
22
- required: true
23
- - type: input
24
- attributes:
25
- label: Expected behavior
26
- placeholder: A clear and concise description of what you expected to happen.
27
- validations:
28
- required: true
29
- - type: textarea
30
- id: Logs
31
- attributes:
32
- label: Relevant log output
33
- placeholder: Bug reports that do not contain logs may be closed without warning. Show the Homebridge logs here. If using Homebridge Config-UI-X, you can easly download your log by visiting the log page on the UI and Clicking the Download Icon in the top right. Remove any sensitive information, such as your homebridge-august refreshToken. Please Turn on Debug Mode before submitting your Issue so more logs can be shared to fix the issue being submitted.
34
- render: shell
35
- validations:
36
- required: true
37
- - type: textarea
38
- id: Config
39
- attributes:
40
- label: Config for homebridge-august
41
- placeholder: Paste your homebridge config.json here. Remove any sensitive information, such as your homebridge-august consumerKey/ consumerSecret / refreshToken.
42
- render: shell
43
- validations:
44
- required: true
45
- - type: textarea
46
- attributes:
47
- label: Screenshots
48
- description: If applicable add screenshots to help explain your problem.
49
- placeholder: You can attach images or log files by clicking this area to highlight it and then dragging files in.
50
- validations:
51
- required: false
52
- - type: input
53
- attributes:
54
- label: Device & Model
55
- placeholder: If applicable, add screenshots to help explain your problem.
56
- validations:
57
- required: true
58
- - type: markdown
59
- attributes:
60
- value: |
61
- Environment
62
- - type: input
63
- attributes:
64
- label: Node.js Version
65
- placeholder: v14.17.6
66
- validations:
67
- required: true
68
- - type: input
69
- attributes:
70
- label: NPM Version
71
- placeholder: v7.22.0
72
- validations:
73
- required: true
74
- - type: input
75
- attributes:
76
- label: Homebridge Version
77
- placeholder: If applicable, add screenshots to help explain your problem.
78
- validations:
79
- required: true
80
- - type: input
81
- attributes:
82
- label: Homebridge August Plugin Version
83
- placeholder: v10.0.1
84
- validations:
85
- required: true
86
- - type: input
87
- attributes:
88
- label: Homebridge Config UI X Plugin Version
89
- placeholder: v4.41.2
90
- validations:
91
- required: false
92
- - type: input
93
- attributes:
94
- label: Operating System
95
- placeholder: Raspbian / Ubuntu / Debian / Windows / macOS / Docker
96
- validations:
97
- required: true
@@ -1,8 +0,0 @@
1
- blank_issues_enabled: false
2
- contact_links:
3
- - name: Homebridge Discord Channel for August
4
- url: https://discord.gg/8fpZA4S
5
- about: Please ask and answer questions here.
6
- - name: Homebridge-August - Pull Requests
7
- url: https://github.com/homebridge-plugins/homebridge-august/pulls
8
- about: Please report security vulnerabilities here.
@@ -1,38 +0,0 @@
1
- name: Feature Request
2
- description: Suggest an idea for this project
3
- title: "Feature Request: "
4
- labels: [enhancement]
5
- assignees: 'donavanbecker'
6
- body:
7
- - type: markdown
8
- attributes:
9
- value: |
10
- You must use the issue template below when submitting a feature request.
11
- - type: markdown
12
- attributes:
13
- value: |
14
- Is your feature request related to a problem? Please describe.
15
- - type: input
16
- attributes:
17
- label: Problem
18
- placeholder: A clear and concise description of what the problem is. Ex. I am always frustrated when [...]
19
- validations:
20
- required: false
21
- - type: input
22
- attributes:
23
- label: Solution
24
- placeholder: A clear and concise description of what you want to happen.
25
- validations:
26
- required: true
27
- - type: input
28
- attributes:
29
- label: Alternatives
30
- placeholder: A clear and concise description of any alternative solutions or features you have considered.
31
- validations:
32
- required: false
33
- - type: input
34
- attributes:
35
- label: Additional context
36
- placeholder: Add any other context or screenshots about the feature request here. Post device logs here.
37
- validations:
38
- required: false
@@ -1,85 +0,0 @@
1
- name: Support Request
2
- description: Need help?
3
- title: "Support Request:"
4
- labels: [question]
5
- assignees: 'donavanbecker'
6
- body:
7
- - type: markdown
8
- attributes:
9
- value: |
10
- You must use the issue template below when submitting a support request.
11
- - type: input
12
- attributes:
13
- label: Describe Your Problem
14
- placeholder: A clear and concise description of what problem you are trying to solve.
15
- validations:
16
- required: true
17
- - type: textarea
18
- id: Logs
19
- attributes:
20
- label: Relevant log output
21
- placeholder: Bug reports that do not contain logs may be closed without warning. Show the Homebridge logs here. If using Homebridge Config-UI-X, you can easly download your log by visiting the log page on the UI and Clicking the Download Icon in the top right. Remove any sensitive information, such as your homebridge-august refreshToken. Please Turn on Debug Mode before submitting your Issue so more logs can be shared to fix the issue being submitted.
22
- render: shell
23
- validations:
24
- required: false
25
- - type: textarea
26
- id: Config
27
- attributes:
28
- label: Config for homebridge-august
29
- placeholder: Paste your homebridge config.json here. Remove any sensitive information, such as your homebridge-august consumerKey/ consumerSecret refreshToken.
30
- render: shell
31
- validations:
32
- required: false
33
- - type: textarea
34
- attributes:
35
- label: Screenshots
36
- description: If applicable add screenshots to help explain your problem.
37
- placeholder: You can attach images or log files by clicking this area to highlight it and then dragging files in.
38
- validations:
39
- required: false
40
- - type: input
41
- attributes:
42
- label: Device & Model
43
- placeholder: If applicable, add screenshots to help explain your problem.
44
- validations:
45
- required: true
46
- - type: markdown
47
- attributes:
48
- value: |
49
- Environment
50
- - type: input
51
- attributes:
52
- label: Node.js Version
53
- placeholder: v14.17.5
54
- validations:
55
- required: true
56
- - type: input
57
- attributes:
58
- label: NPM Version
59
- placeholder: v7.20.5
60
- validations:
61
- required: true
62
- - type: input
63
- attributes:
64
- label: Homebridge Version
65
- placeholder: If applicable, add screenshots to help explain your problem.
66
- validations:
67
- required: true
68
- - type: input
69
- attributes:
70
- label: Homebridge August Plugin Version
71
- placeholder: v10.0.1
72
- validations:
73
- required: true
74
- - type: input
75
- attributes:
76
- label: Homebridge Config UI X Plugin Version
77
- placeholder: v4.41.2
78
- validations:
79
- required: false
80
- - type: input
81
- attributes:
82
- label: Operating System
83
- placeholder: Raspbian / Ubuntu / Debian / Windows / macOS / Docker
84
- validations:
85
- required: true
@@ -1,48 +0,0 @@
1
- ---
2
- name: Bug Report
3
- about: Create a report to help us improve
4
- title: ''
5
- labels: bug
6
- assignees: ''
7
-
8
- ---
9
-
10
- <!-- You must use the issue template below when submitting a bug -->
11
-
12
- **Describe The Bug:**
13
- <!-- A clear and concise description of what the bug is. -->
14
-
15
- **To Reproduce:**
16
- <!-- Steps to reproduce the behavior. -->
17
-
18
- **Expected behavior:**
19
- <!-- A clear and concise description of what you expected to happen. -->
20
-
21
- **Logs:**
22
- <!-- Bug reports that do not contain logs may be closed without warning. -->
23
-
24
- ```
25
- Show the Homebridge / Homebridge Config UI X logs here.
26
- ```
27
-
28
- **Homebridge Config:**
29
-
30
- ```json
31
- Show your homebridge config.json here
32
- ```
33
-
34
- **Screenshots:**
35
- <!-- If applicable, add screenshots to help explain your problem. -->
36
-
37
- **Environment:**
38
-
39
- * **Node.js Version**: <!-- node -v -->
40
- * **NPM Version**: <!-- npm -v -->
41
- * **Homebridge Version**: <!-- homebridge -V -->
42
- * **Homebridge August Plugin Version**:
43
- * **Homebridge Config UI X Version**:
44
- * **Operating System**: Raspbian / Ubuntu / Debian / Windows / macOS / Docker
45
- * **Process Supervisor**: Docker / Systemd / init.d / pm2 / launchctl / hb-service / other / none
46
-
47
-
48
- <!-- Click the "Preview" tab before you submit to ensure the formatting is correct. -->
@@ -1,27 +0,0 @@
1
- ---
2
- name: Enhancement
3
- about: Contribute to Plugin through Pull Request
4
- title: ''
5
- labels: 'enhancement'
6
- assignees: 'donavanbecker'
7
- ---
8
-
9
- **Is your enhancement related to a problem? Please describe.**
10
-
11
- <!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
12
-
13
- **Describe the solution you are addding**
14
-
15
- <!-- A clear and concise description of what you want to happen. -->
16
-
17
- **Changes Proposed in this Pull Request**
18
-
19
- <!-- A clear and concise description of what is being changed. -->
20
-
21
- **Describe alternatives you've considered**
22
-
23
- <!-- A clear and concise description of any alternative solutions or features you've considered. -->
24
-
25
- **Additional context**
26
-
27
- <!-- Add any other context or screenshots about the feature request here. -->