matterbridge 1.3.3 → 1.3.5

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 (87) hide show
  1. package/CHANGELOG.md +598 -542
  2. package/README.md +641 -594
  3. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.d.ts +1 -1
  4. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.d.ts.map +1 -1
  5. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.js +1 -1
  6. package/dist/cluster/CarbonDioxideConcentrationMeasurementCluster.js.map +1 -1
  7. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.d.ts +1 -1
  8. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.d.ts.map +1 -1
  9. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.js +1 -1
  10. package/dist/cluster/CarbonMonoxideConcentrationMeasurementCluster.js.map +1 -1
  11. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.d.ts +1 -1
  12. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.d.ts.map +1 -1
  13. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.js +1 -1
  14. package/dist/cluster/FormaldehydeConcentrationMeasurementCluster.js.map +1 -1
  15. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.d.ts +1 -1
  16. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.d.ts.map +1 -1
  17. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.js +1 -1
  18. package/dist/cluster/NitrogenDioxideConcentrationMeasurementCluster.js.map +1 -1
  19. package/dist/cluster/OzoneConcentrationMeasurementCluster.d.ts +1 -1
  20. package/dist/cluster/OzoneConcentrationMeasurementCluster.d.ts.map +1 -1
  21. package/dist/cluster/OzoneConcentrationMeasurementCluster.js +1 -1
  22. package/dist/cluster/OzoneConcentrationMeasurementCluster.js.map +1 -1
  23. package/dist/cluster/Pm10ConcentrationMeasurementCluster.d.ts +1 -1
  24. package/dist/cluster/Pm10ConcentrationMeasurementCluster.d.ts.map +1 -1
  25. package/dist/cluster/Pm10ConcentrationMeasurementCluster.js +1 -1
  26. package/dist/cluster/Pm10ConcentrationMeasurementCluster.js.map +1 -1
  27. package/dist/cluster/Pm1ConcentrationMeasurementCluster.d.ts +1 -1
  28. package/dist/cluster/Pm1ConcentrationMeasurementCluster.d.ts.map +1 -1
  29. package/dist/cluster/Pm1ConcentrationMeasurementCluster.js +1 -1
  30. package/dist/cluster/Pm1ConcentrationMeasurementCluster.js.map +1 -1
  31. package/dist/cluster/Pm25ConcentrationMeasurementCluster.d.ts +1 -1
  32. package/dist/cluster/Pm25ConcentrationMeasurementCluster.d.ts.map +1 -1
  33. package/dist/cluster/Pm25ConcentrationMeasurementCluster.js +2 -2
  34. package/dist/cluster/Pm25ConcentrationMeasurementCluster.js.map +1 -1
  35. package/dist/cluster/RadonConcentrationMeasurementCluster.d.ts +1 -1
  36. package/dist/cluster/RadonConcentrationMeasurementCluster.d.ts.map +1 -1
  37. package/dist/cluster/RadonConcentrationMeasurementCluster.js +1 -1
  38. package/dist/cluster/RadonConcentrationMeasurementCluster.js.map +1 -1
  39. package/dist/cluster/export.d.ts +25 -0
  40. package/dist/cluster/export.d.ts.map +1 -0
  41. package/dist/cluster/export.js +25 -0
  42. package/dist/cluster/export.js.map +1 -0
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +0 -2
  45. package/dist/index.js.map +1 -1
  46. package/dist/log/export.d.ts +2 -0
  47. package/dist/log/export.d.ts.map +1 -0
  48. package/dist/log/export.js +2 -0
  49. package/dist/log/export.js.map +1 -0
  50. package/dist/matterbridge.d.ts +6 -0
  51. package/dist/matterbridge.d.ts.map +1 -1
  52. package/dist/matterbridge.js +172 -306
  53. package/dist/matterbridge.js.map +1 -1
  54. package/dist/matterbridgeController.d.ts.map +1 -1
  55. package/dist/matterbridgeController.js +0 -3
  56. package/dist/matterbridgeController.js.map +1 -1
  57. package/dist/matterbridgeDevice.d.ts +213 -4
  58. package/dist/matterbridgeDevice.d.ts.map +1 -1
  59. package/dist/matterbridgeDevice.js +129 -42
  60. package/dist/matterbridgeDevice.js.map +1 -1
  61. package/dist/storage/export.d.ts +2 -0
  62. package/dist/storage/export.d.ts.map +1 -0
  63. package/dist/storage/export.js +2 -0
  64. package/dist/storage/export.js.map +1 -0
  65. package/dist/utils/colorUtils.d.ts +61 -0
  66. package/dist/utils/colorUtils.d.ts.map +1 -0
  67. package/dist/utils/colorUtils.js +313 -0
  68. package/dist/utils/colorUtils.js.map +1 -0
  69. package/dist/utils/export.d.ts +3 -0
  70. package/dist/utils/export.d.ts.map +1 -0
  71. package/dist/utils/export.js +3 -0
  72. package/dist/utils/export.js.map +1 -0
  73. package/dist/utils/utils.d.ts +73 -0
  74. package/dist/utils/utils.d.ts.map +1 -0
  75. package/dist/utils/utils.js +266 -0
  76. package/dist/utils/utils.js.map +1 -0
  77. package/dist/utils.d.ts +1 -0
  78. package/dist/utils.d.ts.map +1 -1
  79. package/dist/utils.js +4 -0
  80. package/dist/utils.js.map +1 -1
  81. package/frontend/build/asset-manifest.json +3 -3
  82. package/frontend/build/index.html +1 -1
  83. package/frontend/build/static/js/{main.cbfc6c9b.js → main.c3b5dfce.js} +3 -3
  84. package/frontend/build/static/js/{main.cbfc6c9b.js.map → main.c3b5dfce.js.map} +1 -1
  85. package/package.json +34 -20
  86. package/migrationV8.txt +0 -61
  87. /package/frontend/build/static/js/{main.cbfc6c9b.js.LICENSE.txt → main.c3b5dfce.js.LICENSE.txt} +0 -0
package/README.md CHANGED
@@ -1,594 +1,641 @@
1
- # <img src="https://github.com/Luligu/matterbridge/blob/main/frontend/public/matterbridge%2064x64.png" alt="Matterbridge Logo" width="64px" height="64px">&nbsp;&nbsp;&nbsp;Matterbridge
2
-
3
- [![npm version](https://img.shields.io/npm/v/matterbridge.svg)](https://www.npmjs.com/package/matterbridge)
4
- [![npm downloads](https://img.shields.io/npm/dt/matterbridge.svg)](https://www.npmjs.com/package/matterbridge)
5
- [![Docker Version](https://img.shields.io/docker/v/luligu/matterbridge?label=docker%20version&sort=semver)](https://hub.docker.com/r/luligu/matterbridge)
6
- [![Docker Pulls](https://img.shields.io/docker/pulls/luligu/matterbridge.svg)](https://hub.docker.com/r/luligu/matterbridge)
7
- ![Node.js CI](https://github.com/Luligu/matterbridge/actions/workflows/build.yml/badge.svg)
8
-
9
- [![power by](https://img.shields.io/badge/powered%20by-matter--history-blue)](https://www.npmjs.com/package/matter-history)
10
- [![power by](https://img.shields.io/badge/powered%20by-node--ansi--logger-blue)](https://www.npmjs.com/package/node-ansi-logger)
11
- [![power by](https://img.shields.io/badge/powered%20by-node--persist--manager-blue)](https://www.npmjs.com/package/node-persist-manager)
12
-
13
- ---
14
-
15
-
16
- Matterbridge is a matter.js plugin manager.
17
-
18
- It allows you to have all your Matter devices up and running in a couple of minutes without
19
- having to deal with the pairing process of each single device.
20
-
21
- The developer just focuses on the device development extending the provided classes.
22
-
23
- Just pair Matterbridge once, and it will load all your registered plugins.
24
-
25
- This project aims to allow the porting of homebridge plugins to matterbridge plugins without recoding everything.
26
-
27
- It creates a device to pair in any ecosystem like Apple Home, Google Home, Amazon Alexa, or
28
- any other ecosystem supporting Matter like Home Assistant.
29
-
30
- You don't need a hub or a dedicated new machine.
31
-
32
- No complex setup just copy paste the installation scripts.
33
-
34
- Matterbridge is light weight and run also on slow Linux machine with 512MB of memory.
35
-
36
- It runs perfectly on Windows too.
37
-
38
- The project is build on top of https://github.com/project-chip/matter.js.
39
-
40
- A special thank to Apollon77 for his incredible work.
41
-
42
- ## Installation
43
-
44
- Follow these steps to install Matterbridge:
45
-
46
- on Windows:
47
- ```
48
- npm install -g matterbridge
49
- ```
50
-
51
- on Linux (you need the necessary permissions):
52
- ```
53
- sudo npm install -g matterbridge
54
- ```
55
-
56
- Test the installation with:
57
- ```
58
- matterbridge -bridge
59
- ```
60
-
61
- Now it is possible to open the frontend at the link provided (default: http://localhost:8283)
62
-
63
- ## Usage
64
-
65
- ### mode bridge
66
-
67
- ```
68
- matterbridge -bridge
69
- ```
70
-
71
- Matterbridge only exposes itself, and you have to pair it scanning the QR code shown in the frontend or in the console.
72
-
73
- ### mode childbridge
74
-
75
- ```
76
- matterbridge -childbridge
77
- ```
78
-
79
- Matterbridge exposes each registered plugins, and you have to pair each one by scanning the QR code shown in the frontend or in the console.
80
-
81
- ### Use matterbridge -help to see the command line syntax
82
-
83
- ```
84
- matterbridge -help
85
- ```
86
-
87
- ## Frontend
88
-
89
- Matterbridge has a frontend available on http://localhost:8283
90
-
91
- You can change the default port by adding the frontend parameter when you launch it.
92
-
93
- Here's how to specify a different port number:
94
- ```
95
- matterbridge -bridge -frontend [port number]
96
- ```
97
-
98
- ```
99
- matterbridge -childbridge -frontend [port number]
100
- ```
101
-
102
- Home page:
103
- ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20home.jpg)
104
-
105
- Devices page:
106
- ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20devices.jpg)
107
-
108
- Logs page:
109
- ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20logs.jpg)
110
-
111
- Config editor:
112
- ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20config%20editor.jpg)
113
-
114
- ## Plugins
115
-
116
- ### Production-level plugins
117
-
118
- [zigbee2mqtt](https://github.com/Luligu/matterbridge-zigbee2mqtt)
119
-
120
- Matterbridge zigbee2mqtt is a matterbridge production-level plugin that expose all zigbee2mqtt devices and groups to Matter.
121
-
122
- No hub or dedicated hardware needed.
123
-
124
- [somy-tahoma](https://github.com/Luligu/matterbridge-somfy-tahoma)
125
-
126
- Matterbridge Somfy Tahoma is a matterbridge production-level plugin that expose all Somfy Tahoma devices to Matter.
127
-
128
- [shelly](https://github.com/Luligu/matterbridge-shelly)
129
-
130
- Matterbridge shelly allows you to expose Shelly Gen 1, Gen 2, and Gen 3 devices to Matter.
131
-
132
- Features:
133
-
134
- - Shellies are automatically discovered using mDNS.
135
- - Discovered shellies are stored in local storage for quick loading on startup.
136
- - In this first release, the components exposed are lights (with brightness), switches, rollers and meters.
137
- - Shellies are controlled locally, eliminating the need for cloud or MQTT (which can be disabled).
138
- - Shelly Gen 1 devices are controlled using the CoIoT protocol (see the note below).
139
- - Shelly Gen 2 and Gen 3 devices are controlled using WebSocket.
140
- - The Matter device takes the name configured in the Shelly device's web page.
141
- - A 10-minute timer checks if the device has reported in that time.
142
-
143
- ### Accessory platform example
144
-
145
- This an example of an accessory platform plugin.
146
-
147
- It exposes a virtual cover device that continuously moves position and shows how to use the command handlers (you can control the device).
148
-
149
- An Accessory platform plugin only exposes one device.
150
-
151
- [See the plugin homepage here](https://github.com/Luligu/matterbridge-example-accessory-platform)
152
-
153
- ### Dynamic platform example
154
-
155
- This an example of a dynamic platform plugin.
156
-
157
- It exposes a switch with onOff, a light with onOff-levelControl-colorControl, an outlet with onOff and a WindoweCovering device.
158
-
159
- All these virtual devices continuously change state and position. The plugin also shows how to use all the command handlers (you can control all the devices).
160
-
161
- A Dynamic platform plugin exposes as many devices as you need (the limit for the Home app is 150 accessories for bridge).
162
-
163
- Matterbridge can run as many plugins as you want.
164
-
165
- [See the plugin homepage here](https://github.com/Luligu/matterbridge-example-dynamic-platform)
166
-
167
- ### Example plugins to show the usage of history in matter
168
-
169
- [Door plugin with history](https://github.com/Luligu/matterbridge-eve-door)
170
-
171
- [Motion plugin with history](https://github.com/Luligu/matterbridge-eve-motion)
172
-
173
- [Energy plugin with history](https://github.com/Luligu/matterbridge-eve-energy)
174
-
175
- [Weather plugin with history](https://github.com/Luligu/matterbridge-eve-weather)
176
-
177
- [Room plugin with history](https://github.com/Luligu/matterbridge-eve-room)
178
-
179
- The history works in both bridge and childbridge mode.
180
-
181
- The Eve app only shows the history when the plugins run like an AccessoryPlatform in childbridge mode (this means the plugin is paired directly).
182
-
183
-
184
- ## How to install and register a production-level plugin (from npm)
185
-
186
- To install i.e. https://github.com/Luligu/matterbridge-zigbee2mqtt
187
-
188
- On windows:
189
- ```
190
- cd $HOME\Matterbridge
191
- npm install -g matterbridge-zigbee2mqtt
192
- matterbridge -add matterbridge-zigbee2mqtt
193
- ```
194
-
195
- On linux:
196
- ```
197
- cd ~/Matterbridge
198
- sudo npm install -g matterbridge-zigbee2mqtt
199
- matterbridge -add matterbridge-zigbee2mqtt
200
- ```
201
-
202
- ## How to install and register a plugin for development (from github)
203
-
204
- To install i.e. https://github.com/Luligu/matterbridge-example-accessory-platform
205
-
206
- On windows:
207
- ```
208
- cd $HOME\Matterbridge
209
- ```
210
-
211
- On linux:
212
- ```
213
- cd ~/Matterbridge
214
- ```
215
-
216
- then clone the plugin
217
-
218
- ```
219
- git clone https://github.com/Luligu/matterbridge-example-accessory-platform
220
- cd matterbridge-example-accessory-platform
221
- npm install
222
- npm run build
223
- ```
224
-
225
- then add the plugin to Matterbridge
226
-
227
- ```
228
- matterbridge -add .\
229
- ```
230
-
231
- ## How to add a plugin to Matterbridge
232
-
233
- ```
234
- matterbridge -add [plugin path or plugin name]
235
- ```
236
-
237
- ## How to remove a plugin from Matterbridge
238
-
239
- ```
240
- matterbridge -remove [plugin path or plugin name]
241
- ```
242
-
243
- ## How to disable a registered plugin
244
-
245
- ```
246
- matterbridge -disable [plugin path or plugin name]
247
- ```
248
-
249
- ## How to enable a registered plugin
250
-
251
- ```
252
- matterbridge -enable [plugin path or plugin name]
253
- ```
254
-
255
- ## How to remove the commissioning information for Matterbridge so you can pair it again (bridge mode). Shutdown Matterbridge before!
256
-
257
- ```
258
- matterbridge -reset
259
- ```
260
-
261
- ## How to remove the commissioning information for a registered plugin so you can pair it again (childbridge mode). Shutdown Matterbridge before!
262
-
263
- ```
264
- matterbridge -reset [plugin path or plugin name]
265
- ```
266
-
267
- ## How to factory reset Matterbridge. Shutdown Matterbridge before!
268
-
269
- ```
270
- matterbridge -factoryreset
271
- ```
272
-
273
- This will reset the internal storages. All commissioning informations will be lost. All plugins will be unregistered.
274
-
275
- ## How to create your plugin
276
-
277
- The easiest way is to clone:
278
-
279
- - https://github.com/Luligu/matterbridge-example-accessory-platform if you want to create an Accessory Platform Plugin.
280
-
281
-
282
- - https://github.com/Luligu/matterbridge-example-dynamic-platform if you want to create a Dynamic Platform Plugin.
283
-
284
- Then change the name (keep matterbridge- at the beginning of the name), version, description and author in the package.json.
285
-
286
- Add your plugin logic in platform.ts.
287
-
288
- ## MatterbridgeDynamicPlatform and MatterbridgeAccessoryPlatform api
289
-
290
- ### public name: string
291
- The plugin name.
292
-
293
- ### public type: string
294
- The plugin platform type.
295
-
296
- ### public config: object
297
- The plugin config (loaded before the platform constructor is called and saved after onShutdown() is called).
298
- Here you can store your plugin configuration (see matterbridge-zigbee2mqtt for example)
299
-
300
- ### async onStart(reason?: string)
301
- The method onStart() is where you have to create your MatterbridgeDevice and add all needed clusters and command handlers.
302
-
303
- The MatterbridgeDevice class has the create cluster methods already done and all command handlers needed (see plugin examples).
304
-
305
- The method is called when Matterbridge load the plugin.
306
-
307
- ### async onConfigure()
308
- The method onConfigure() is where you can configure or initialize your device.
309
-
310
- The method is called when the platform is commissioned.
311
-
312
- ### async onShutdown(reason?: string)
313
- The method onShutdown() is where you have to eventually cleanup some resources.
314
-
315
- The method is called when Matterbridge is shutting down.
316
-
317
- ### async registerDevice(device: MatterbridgeDevice)
318
- After you created your device, add it to the platform.
319
-
320
- ### async unregisterDevice(device: MatterbridgeDevice)
321
- You can unregister one or more device.
322
-
323
- ### async unregisterAllDevices()
324
- You can unregister all devices you added.
325
-
326
- It can be useful to call this method from onShutdown() if you don't want to keep all the devices during development.
327
-
328
- ## MatterbridgeDevice api
329
-
330
- # Advanced configuration
331
-
332
- ## Run matterbridge as a daemon with systemctl (Linux only)
333
-
334
- Create a systemctl configuration file for Matterbridge
335
-
336
- ```
337
- sudo nano /etc/systemd/system/matterbridge.service
338
- ```
339
-
340
- Add the following to this file, replacing twice (!) USER with your user name (e.g. WorkingDirectory=/home/pi/Matterbridge and User=pi):
341
-
342
- ```
343
- [Unit]
344
- Description=matterbridge
345
- After=network-online.target
346
-
347
- [Service]
348
- Type=simple
349
- ExecStart=/usr/bin/matterbridge -bridge -service
350
- WorkingDirectory=/home/<USER>/Matterbridge
351
- StandardOutput=inherit
352
- StandardError=inherit
353
- Restart=always
354
- RestartSec=10s
355
- TimeoutStopSec=30s
356
- User=<USER>
357
-
358
- [Install]
359
- WantedBy=multi-user.target
360
- ```
361
-
362
- If you modify it after, then run:
363
- ```
364
- sudo systemctl daemon-reload
365
- ```
366
-
367
- ### Start Matterbridge
368
- ```
369
- sudo systemctl start matterbridge
370
- ```
371
-
372
- ### Stop Matterbridge
373
- ```
374
- sudo systemctl stop matterbridge
375
- ```
376
-
377
- ### Show Matterbridge status
378
- ```
379
- sudo systemctl status matterbridge.service
380
- ```
381
-
382
- ### View the log of Matterbridge in real time (this will show the log with colors)
383
- ```
384
- sudo journalctl -u matterbridge.service -f --output cat
385
- ```
386
-
387
- ### Delete the logs older then 3 days (all of them not only the ones of Matterbridge!)
388
- ```
389
- sudo journalctl --vacuum-time=3d
390
- ```
391
-
392
- ### Enable Matterbridge to start automatically on boot
393
-
394
- ```
395
- sudo systemctl enable matterbridge.service
396
- ```
397
-
398
- ### Disable Matterbridge from starting automatically on boot
399
-
400
- ```
401
- sudo systemctl disable matterbridge.service
402
- ```
403
-
404
- ## Run matterbridge with docker (Linux only)
405
-
406
- The Matterbridge Docker image, which includes a manifest list for the linux/amd64, linux/arm64 and linux/arm/v7 architectures, is published on Docker Hub.
407
-
408
- ### First create the Matterbridge directories
409
-
410
- This will create the required directories if they don't exist
411
-
412
- ```
413
- cd ~
414
- mkdir -p ./Matterbridge
415
- mkdir -p ./.matterbridge
416
- sudo chown -R $USER:$USER ./Matterbridge ./.matterbridge
417
- ```
418
-
419
- ### Run the Docker container and start it
420
-
421
- The container has full access to the host network (needed for mdns).
422
-
423
- ```
424
- docker run --name matterbridge \
425
- -v ${HOME}/Matterbridge:/root/Matterbridge \
426
- -v ${HOME}/.matterbridge:/root/.matterbridge \
427
- --network host --restart always -d luligu/matterbridge:latest
428
- ```
429
-
430
- ### Run with docker compose
431
-
432
- The docker-compose.yml file is available in the docker directory of the package
433
-
434
- ```
435
- services:
436
- matterbridge:
437
- container_name: matterbridge
438
- image: luligu/matterbridge:latest # Matterbridge image with the latest tag
439
- network_mode: host # Ensures the Matter mdns works
440
- restart: always # Ensures the container always restarts automatically
441
- volumes:
442
- - "${HOME}/Matterbridge:/root/Matterbridge" # Mounts the Matterbridge plugin directory
443
- - "${HOME}/.matterbridge:/root/.matterbridge" # Mounts the Matterbridge storage directory
444
- ```
445
- copy it in the home directory or edit the existing one to add the matterbridge service.
446
-
447
- Then start docker compose with:
448
-
449
- ```
450
- docker compose up -d
451
- ```
452
-
453
- ### Stop with docker compose
454
- ```
455
- docker compose down
456
- ```
457
-
458
- ### Update with docker compose
459
- ```
460
- docker compose pull
461
- ```
462
-
463
- ### Inspect the container
464
- ```
465
- docker container inspect matterbridge
466
- ```
467
-
468
- ### Start the Docker container
469
- ```
470
- docker start matterbridge
471
- ```
472
-
473
- ### Stop the Docker container
474
- ```
475
- docker stop matterbridge
476
- ```
477
-
478
- ### Restart the Docker container
479
- ```
480
- docker restart matterbridge
481
- ```
482
-
483
- ### Shows the logs
484
- ```
485
- docker logs matterbridge
486
- ```
487
-
488
- ### Shows the logs real time (tail)
489
- ```
490
- docker logs --tail 1000 -f matterbridge
491
- ```
492
-
493
- # Known general issues
494
-
495
- ## Session XYZ does not exist
496
- This message may appear after Matterbridge restarts, indicating that the controller is still using a session from the previous connection that has since been closed.
497
- After some time, the controller will reconnect.
498
- In this context, the message is not indicative of a problem.
499
-
500
- ## Apple Home
501
-
502
- The HomePods, being a WiFi devices, sometimes pruduce message trasmission errors. The Apple TV with network cable is more reliable (but also more expensive).
503
-
504
- Solved with the version 17.5 of the HomePod/AppleTV. Now they are stable.
505
-
506
- ### DoorLock issue
507
-
508
- The DoorLock cluster in the Home app takes a while to get online. The Home app shows no response for 1 or 2 seconds but then the accessory goes online. With the Eve app or the Controller app this issue is not present.
509
-
510
- Solved with the version 17.5 of the HomePod/AppleTV.
511
-
512
- ## Home Assistant
513
-
514
- So far is the only controller supporting some Matter 1.3 device type:
515
- - air quality sensor
516
-
517
- HA also support electrical measurements from EveHistoryCluster (used in Matterbridge plugins)
518
-
519
- ## Home Assistant issues (Matter Server for HA is still in Beta)
520
-
521
- - If HA doesn't show all devices just reload the Matter Server or reboot HA
522
- - Home Assistant doesn't seem to react when a device is removed from the bridge: they remain in HA unavailable forever...
523
- - In the Home Assistant Core log you can see sometimes error messages relating to unique id not found but it seems to be an issue related to missing some matter packet during the commissioning and subscription phase...
524
- - Version 6.1.0 is more stable and has solved the problem of the commissioning window: now pairing is again easy. Use Apple Home when you have to choose the controller type even if you pair Matterbridge directly with HA.
525
-
526
- ## Google Home
527
-
528
- No issues reported so far.
529
-
530
- ## Alexa
531
-
532
- Tested by Tamer Salah
533
-
534
- Alexa needs the standard port 5540 to pair (from matter.js readme).
535
-
536
- There is no support for these Matter device types:
537
- - pressure sensor
538
- - flow sensor
539
- - light sensor
540
-
541
- In the zigbee2mqtt and shelly plugins select the option to expose
542
- the switch devices like light or outlet cause they don't show up like switch
543
- (Matterbridge uses a modified switch device type without client cluster).
544
-
545
- ## SmartThings
546
-
547
- Tested by Tamer Salah
548
-
549
- No issues reported so far.
550
-
551
- ## eWeLink
552
-
553
- Tested by Tamer Salah
554
-
555
- eWeLink needs the standard port 5540 for commissioning.
556
-
557
- ## Tuya/Smart Life
558
-
559
- Check the matter.js readme.
560
-
561
- # Contribution Guidelines
562
-
563
- Thank you for your interest in contributing to my project!
564
-
565
- I warmly welcome contributions to this project! Whether it's reporting bugs, proposing new features, updating documentation, or writing code, your help is greatly appreciated.
566
-
567
- ## Getting Started
568
-
569
- - Fork this repository to your own GitHub account and clone it to your local device.
570
- - Make the necessary changes and test them out
571
- - Commit your changes and push to your forked repository
572
-
573
- ## Submitting Changes
574
-
575
- - Create a new pull request against the dev from my repository and I'll be glad to check it out
576
- - Be sure to follow the existing code style
577
- - Add unit tests for any new or changed functionality if possible
578
- - In your pull request, do describe what your changes do and how they work
579
-
580
- ## Code of Conduct
581
-
582
- We believe in a welcoming and respectful community for all. Please make sure to follow our [Code of Conduct](LINK_TO_CODE_OF_CONDUCT) in all your interactions with the project.
583
-
584
- ## Support
585
-
586
- If you find this project helpful and you wish to support the ongoing development, you can do so by buying me a coffee.
587
- On my side I sponsor the packages that I use in this project. It would be nice to have sponsors too.
588
- Click on the badge below to get started:
589
-
590
- <a href="https://www.buymeacoffee.com/luligugithub">
591
- <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
592
- </a>
593
-
594
- Thank you for your support!
1
+ # <img src="https://github.com/Luligu/matterbridge/blob/main/frontend/public/matterbridge%2064x64.png" alt="Matterbridge Logo" width="64px" height="64px">&nbsp;&nbsp;&nbsp;Matterbridge
2
+
3
+ [![npm version](https://img.shields.io/npm/v/matterbridge.svg)](https://www.npmjs.com/package/matterbridge)
4
+ [![npm downloads](https://img.shields.io/npm/dt/matterbridge.svg)](https://www.npmjs.com/package/matterbridge)
5
+ [![Docker Version](https://img.shields.io/docker/v/luligu/matterbridge?label=docker%20version&sort=semver)](https://hub.docker.com/r/luligu/matterbridge)
6
+ [![Docker Pulls](https://img.shields.io/docker/pulls/luligu/matterbridge.svg)](https://hub.docker.com/r/luligu/matterbridge)
7
+ ![Node.js CI](https://github.com/Luligu/matterbridge/actions/workflows/build.yml/badge.svg)
8
+
9
+ [![power by](https://img.shields.io/badge/powered%20by-matter--history-blue)](https://www.npmjs.com/package/matter-history)
10
+ [![power by](https://img.shields.io/badge/powered%20by-node--ansi--logger-blue)](https://www.npmjs.com/package/node-ansi-logger)
11
+ [![power by](https://img.shields.io/badge/powered%20by-node--persist--manager-blue)](https://www.npmjs.com/package/node-persist-manager)
12
+
13
+ ---
14
+
15
+ Matterbridge is a matter.js plugin manager.
16
+
17
+ It allows you to have all your Matter devices up and running in a couple of minutes without
18
+ having to deal with the pairing process of each single device.
19
+
20
+ The developer just focuses on the device development extending the provided classes.
21
+
22
+ Just pair Matterbridge once, and it will load all your registered plugins.
23
+
24
+ This project aims to allow the porting of homebridge plugins to matterbridge plugins without recoding everything.
25
+
26
+ It creates a device to pair in any ecosystem like Apple Home, Google Home, Amazon Alexa, or
27
+ any other ecosystem supporting Matter like Home Assistant.
28
+
29
+ You don't need a hub or a dedicated new machine.
30
+
31
+ No complex setup just copy paste the installation scripts.
32
+
33
+ Matterbridge is light weight and run also on slow Linux machine with 512MB of memory.
34
+
35
+ It runs perfectly on Windows too.
36
+
37
+ If you like this project and find it useful, please consider giving it a star on GitHub at https://github.com/Luligu/matterbridge and sponsoring it.
38
+
39
+ ## Acknowledgements
40
+
41
+ The project is build on top of https://github.com/project-chip/matter.js.
42
+
43
+ A special thank to Apollon77 for his incredible work.
44
+
45
+ ## Installation
46
+
47
+ Follow these steps to install Matterbridge:
48
+
49
+ on Windows:
50
+
51
+ ```
52
+ npm install -g matterbridge
53
+ ```
54
+
55
+ on Linux (you need the necessary permissions):
56
+
57
+ ```
58
+ sudo npm install -g matterbridge
59
+ ```
60
+
61
+ Test the installation with:
62
+
63
+ ```
64
+ matterbridge -bridge
65
+ ```
66
+
67
+ Now it is possible to open the frontend at the link provided (default: http://localhost:8283)
68
+
69
+ ## Usage
70
+
71
+ ### mode bridge
72
+
73
+ ```
74
+ matterbridge -bridge
75
+ ```
76
+
77
+ Matterbridge only exposes itself, and you have to pair it scanning the QR code shown in the frontend or in the console.
78
+
79
+ ### mode childbridge
80
+
81
+ ```
82
+ matterbridge -childbridge
83
+ ```
84
+
85
+ Matterbridge exposes each registered plugins, and you have to pair each one by scanning the QR code shown in the frontend or in the console.
86
+
87
+ ### Use matterbridge -help to see the command line syntax
88
+
89
+ ```
90
+ matterbridge -help
91
+ ```
92
+
93
+ ## Frontend
94
+
95
+ Matterbridge has a frontend available on http://localhost:8283
96
+
97
+ You can change the default port by adding the frontend parameter when you launch it.
98
+
99
+ Here's how to specify a different port number:
100
+
101
+ ```
102
+ matterbridge -bridge -frontend [port number]
103
+ ```
104
+
105
+ ```
106
+ matterbridge -childbridge -frontend [port number]
107
+ ```
108
+
109
+ Home page:
110
+ ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20home.jpg)
111
+
112
+ Devices page:
113
+ ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20devices.jpg)
114
+
115
+ Logs page:
116
+ ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20logs.jpg)
117
+
118
+ Config editor:
119
+ ![See the screenshot here](https://github.com/Luligu/matterbridge/blob/main/Screenshot%20config%20editor.jpg)
120
+
121
+ ## Plugins
122
+
123
+ ### Production-level plugins
124
+
125
+ [zigbee2mqtt](https://github.com/Luligu/matterbridge-zigbee2mqtt)
126
+
127
+ Matterbridge zigbee2mqtt is a matterbridge production-level plugin that expose all zigbee2mqtt devices and groups to Matter.
128
+
129
+ No hub or dedicated hardware needed.
130
+
131
+ [somy-tahoma](https://github.com/Luligu/matterbridge-somfy-tahoma)
132
+
133
+ Matterbridge Somfy Tahoma is a matterbridge production-level plugin that expose all Somfy Tahoma devices to Matter.
134
+
135
+ [shelly](https://github.com/Luligu/matterbridge-shelly)
136
+
137
+ Matterbridge shelly allows you to expose Shelly Gen 1, Gen 2, and Gen 3 devices to Matter.
138
+
139
+ Features:
140
+
141
+ - Shellies are automatically discovered using mDNS.
142
+ - Discovered shellies are stored in local storage for quick loading on startup.
143
+ - In this first release, the components exposed are lights (with brightness), switches, rollers and meters.
144
+ - Shellies are controlled locally, eliminating the need for cloud or MQTT (which can be disabled).
145
+ - Shelly Gen 1 devices are controlled using the CoIoT protocol (see the note below).
146
+ - Shelly Gen 2 and Gen 3 devices are controlled using WebSocket.
147
+ - The Matter device takes the name configured in the Shelly device's web page.
148
+ - A 10-minute timer checks if the device has reported in that time.
149
+
150
+ ### Accessory platform example
151
+
152
+ This an example of an accessory platform plugin.
153
+
154
+ It exposes a virtual cover device that continuously moves position and shows how to use the command handlers (you can control the device).
155
+
156
+ An Accessory platform plugin only exposes one device.
157
+
158
+ [See the plugin homepage here](https://github.com/Luligu/matterbridge-example-accessory-platform)
159
+
160
+ ### Dynamic platform example
161
+
162
+ This an example of a dynamic platform plugin.
163
+
164
+ It exposes a switch with onOff, a light with onOff-levelControl-colorControl, an outlet with onOff and a WindoweCovering device.
165
+
166
+ All these virtual devices continuously change state and position. The plugin also shows how to use all the command handlers (you can control all the devices).
167
+
168
+ A Dynamic platform plugin exposes as many devices as you need (the limit for the Home app is 150 accessories for bridge).
169
+
170
+ Matterbridge can run as many plugins as you want.
171
+
172
+ [See the plugin homepage here](https://github.com/Luligu/matterbridge-example-dynamic-platform)
173
+
174
+ ### Example plugins to show the usage of history in matter
175
+
176
+ [Door plugin with history](https://github.com/Luligu/matterbridge-eve-door)
177
+
178
+ [Motion plugin with history](https://github.com/Luligu/matterbridge-eve-motion)
179
+
180
+ [Energy plugin with history](https://github.com/Luligu/matterbridge-eve-energy)
181
+
182
+ [Weather plugin with history](https://github.com/Luligu/matterbridge-eve-weather)
183
+
184
+ [Room plugin with history](https://github.com/Luligu/matterbridge-eve-room)
185
+
186
+ The history works in both bridge and childbridge mode.
187
+
188
+ The Eve app only shows the history when the plugins run like an AccessoryPlatform in childbridge mode (this means the plugin is paired directly).
189
+
190
+ ## How to install and register a production-level plugin (from npm)
191
+
192
+ To install i.e. https://github.com/Luligu/matterbridge-zigbee2mqtt
193
+
194
+ On windows:
195
+
196
+ ```
197
+ cd $HOME\Matterbridge
198
+ npm install -g matterbridge-zigbee2mqtt
199
+ matterbridge -add matterbridge-zigbee2mqtt
200
+ ```
201
+
202
+ On linux:
203
+
204
+ ```
205
+ cd ~/Matterbridge
206
+ sudo npm install -g matterbridge-zigbee2mqtt
207
+ matterbridge -add matterbridge-zigbee2mqtt
208
+ ```
209
+
210
+ ## How to install and register a plugin for development (from github)
211
+
212
+ To install i.e. https://github.com/Luligu/matterbridge-example-accessory-platform
213
+
214
+ On windows:
215
+
216
+ ```
217
+ cd $HOME\Matterbridge
218
+ ```
219
+
220
+ On linux:
221
+
222
+ ```
223
+ cd ~/Matterbridge
224
+ ```
225
+
226
+ then clone the plugin
227
+
228
+ ```
229
+ git clone https://github.com/Luligu/matterbridge-example-accessory-platform
230
+ cd matterbridge-example-accessory-platform
231
+ npm install
232
+ npm run build
233
+ ```
234
+
235
+ then add the plugin to Matterbridge
236
+
237
+ ```
238
+ matterbridge -add .\
239
+ ```
240
+
241
+ ## How to add a plugin to Matterbridge
242
+
243
+ ```
244
+ matterbridge -add [plugin path or plugin name]
245
+ ```
246
+
247
+ ## How to remove a plugin from Matterbridge
248
+
249
+ ```
250
+ matterbridge -remove [plugin path or plugin name]
251
+ ```
252
+
253
+ ## How to disable a registered plugin
254
+
255
+ ```
256
+ matterbridge -disable [plugin path or plugin name]
257
+ ```
258
+
259
+ ## How to enable a registered plugin
260
+
261
+ ```
262
+ matterbridge -enable [plugin path or plugin name]
263
+ ```
264
+
265
+ ## How to remove the commissioning information for Matterbridge so you can pair it again (bridge mode). Shutdown Matterbridge before!
266
+
267
+ ```
268
+ matterbridge -reset
269
+ ```
270
+
271
+ ## How to remove the commissioning information for a registered plugin so you can pair it again (childbridge mode). Shutdown Matterbridge before!
272
+
273
+ ```
274
+ matterbridge -reset [plugin path or plugin name]
275
+ ```
276
+
277
+ ## How to factory reset Matterbridge. Shutdown Matterbridge before!
278
+
279
+ ```
280
+ matterbridge -factoryreset
281
+ ```
282
+
283
+ This will reset the internal storages. All commissioning informations will be lost. All plugins will be unregistered.
284
+
285
+ ## How to create your plugin
286
+
287
+ The easiest way is to clone:
288
+
289
+ - https://github.com/Luligu/matterbridge-example-accessory-platform if you want to create an Accessory Platform Plugin.
290
+
291
+ - https://github.com/Luligu/matterbridge-example-dynamic-platform if you want to create a Dynamic Platform Plugin.
292
+
293
+ Then change the name (keep matterbridge- at the beginning of the name), version, description and author in the package.json.
294
+
295
+ Add your plugin logic in platform.ts.
296
+
297
+ ## MatterbridgeDynamicPlatform and MatterbridgeAccessoryPlatform api
298
+
299
+ ### public name: string
300
+
301
+ The plugin name.
302
+
303
+ ### public type: string
304
+
305
+ The plugin platform type.
306
+
307
+ ### public config: object
308
+
309
+ The plugin config (loaded before the platform constructor is called and saved after onShutdown() is called).
310
+ Here you can store your plugin configuration (see matterbridge-zigbee2mqtt for example)
311
+
312
+ ### async onStart(reason?: string)
313
+
314
+ The method onStart() is where you have to create your MatterbridgeDevice and add all needed clusters and command handlers.
315
+
316
+ The MatterbridgeDevice class has the create cluster methods already done and all command handlers needed (see plugin examples).
317
+
318
+ The method is called when Matterbridge load the plugin.
319
+
320
+ ### async onConfigure()
321
+
322
+ The method onConfigure() is where you can configure or initialize your device.
323
+
324
+ The method is called when the platform is commissioned.
325
+
326
+ ### async onShutdown(reason?: string)
327
+
328
+ The method onShutdown() is where you have to eventually cleanup some resources.
329
+
330
+ The method is called when Matterbridge is shutting down.
331
+
332
+ ### async registerDevice(device: MatterbridgeDevice)
333
+
334
+ After you created your device, add it to the platform.
335
+
336
+ ### async unregisterDevice(device: MatterbridgeDevice)
337
+
338
+ You can unregister one or more device.
339
+
340
+ ### async unregisterAllDevices()
341
+
342
+ You can unregister all devices you added.
343
+
344
+ It can be useful to call this method from onShutdown() if you don't want to keep all the devices during development.
345
+
346
+ ## MatterbridgeDevice api
347
+
348
+ # Advanced configuration
349
+
350
+ ## Run matterbridge as a daemon with systemctl (Linux only)
351
+
352
+ Create a systemctl configuration file for Matterbridge
353
+
354
+ ```
355
+ sudo nano /etc/systemd/system/matterbridge.service
356
+ ```
357
+
358
+ Add the following to this file, replacing twice (!) USER with your user name (e.g. WorkingDirectory=/home/pi/Matterbridge and User=pi):
359
+
360
+ ```
361
+ [Unit]
362
+ Description=matterbridge
363
+ After=network-online.target
364
+
365
+ [Service]
366
+ Type=simple
367
+ ExecStart=/usr/bin/matterbridge -bridge -service
368
+ WorkingDirectory=/home/<USER>/Matterbridge
369
+ StandardOutput=inherit
370
+ StandardError=inherit
371
+ Restart=always
372
+ RestartSec=10s
373
+ TimeoutStopSec=30s
374
+ User=<USER>
375
+
376
+ [Install]
377
+ WantedBy=multi-user.target
378
+ ```
379
+
380
+ If you modify it after, then run:
381
+
382
+ ```
383
+ sudo systemctl daemon-reload
384
+ ```
385
+
386
+ ### Start Matterbridge
387
+
388
+ ```
389
+ sudo systemctl start matterbridge
390
+ ```
391
+
392
+ ### Stop Matterbridge
393
+
394
+ ```
395
+ sudo systemctl stop matterbridge
396
+ ```
397
+
398
+ ### Show Matterbridge status
399
+
400
+ ```
401
+ sudo systemctl status matterbridge.service
402
+ ```
403
+
404
+ ### View the log of Matterbridge in real time (this will show the log with colors)
405
+
406
+ ```
407
+ sudo journalctl -u matterbridge.service -f --output cat
408
+ ```
409
+
410
+ ### Delete the logs older then 3 days (all of them not only the ones of Matterbridge!)
411
+
412
+ ```
413
+ sudo journalctl --vacuum-time=3d
414
+ ```
415
+
416
+ ### Enable Matterbridge to start automatically on boot
417
+
418
+ ```
419
+ sudo systemctl enable matterbridge.service
420
+ ```
421
+
422
+ ### Disable Matterbridge from starting automatically on boot
423
+
424
+ ```
425
+ sudo systemctl disable matterbridge.service
426
+ ```
427
+
428
+ ## Run matterbridge with docker (Linux only)
429
+
430
+ The Matterbridge Docker image, which includes a manifest list for the linux/amd64, linux/arm64 and linux/arm/v7 architectures, is published on Docker Hub.
431
+
432
+ ### First create the Matterbridge directories
433
+
434
+ This will create the required directories if they don't exist
435
+
436
+ ```
437
+ cd ~
438
+ mkdir -p ./Matterbridge
439
+ mkdir -p ./.matterbridge
440
+ sudo chown -R $USER:$USER ./Matterbridge ./.matterbridge
441
+ ```
442
+
443
+ ### Run the Docker container and start it
444
+
445
+ The container has full access to the host network (needed for mdns).
446
+
447
+ ```
448
+ docker run --name matterbridge \
449
+ -v ${HOME}/Matterbridge:/root/Matterbridge \
450
+ -v ${HOME}/.matterbridge:/root/.matterbridge \
451
+ --network host --restart always -d luligu/matterbridge:latest
452
+ ```
453
+
454
+ ### Run with docker compose
455
+
456
+ The docker-compose.yml file is available in the docker directory of the package
457
+
458
+ ```
459
+ services:
460
+ matterbridge:
461
+ container_name: matterbridge
462
+ image: luligu/matterbridge:latest # Matterbridge image with the latest tag
463
+ network_mode: host # Ensures the Matter mdns works
464
+ restart: always # Ensures the container always restarts automatically
465
+ volumes:
466
+ - "${HOME}/Matterbridge:/root/Matterbridge" # Mounts the Matterbridge plugin directory
467
+ - "${HOME}/.matterbridge:/root/.matterbridge" # Mounts the Matterbridge storage directory
468
+ ```
469
+
470
+ copy it in the home directory or edit the existing one to add the matterbridge service.
471
+
472
+ Then start docker compose with:
473
+
474
+ ```
475
+ docker compose up -d
476
+ ```
477
+
478
+ ### Stop with docker compose
479
+
480
+ ```
481
+ docker compose down
482
+ ```
483
+
484
+ ### Update with docker compose
485
+
486
+ ```
487
+ docker compose pull
488
+ ```
489
+
490
+ ### Inspect the container
491
+
492
+ ```
493
+ docker container inspect matterbridge
494
+ ```
495
+
496
+ ### Start the Docker container
497
+
498
+ ```
499
+ docker start matterbridge
500
+ ```
501
+
502
+ ### Stop the Docker container
503
+
504
+ ```
505
+ docker stop matterbridge
506
+ ```
507
+
508
+ ### Restart the Docker container
509
+
510
+ ```
511
+ docker restart matterbridge
512
+ ```
513
+
514
+ ### Shows the logs
515
+
516
+ ```
517
+ docker logs matterbridge
518
+ ```
519
+
520
+ ### Shows the logs real time (tail)
521
+
522
+ ```
523
+ docker logs --tail 1000 -f matterbridge
524
+ ```
525
+
526
+ # Known general issues
527
+
528
+ ## Session XYZ does not exist
529
+
530
+ This message may appear after Matterbridge restarts, indicating that the controller is still using a session from the previous connection that has since been closed.
531
+ After some time, the controller will reconnect.
532
+ In this context, the message is not indicative of a problem.
533
+
534
+ ## Apple Home
535
+
536
+ The HomePods, being a WiFi devices, sometimes pruduce message trasmission errors. The Apple TV with network cable is more reliable (but also more expensive).
537
+
538
+ Solved with the version 17.5 of the HomePod/AppleTV. Now they are stable.
539
+
540
+ ### DoorLock issue
541
+
542
+ The DoorLock cluster in the Home app takes a while to get online. The Home app shows no response for 1 or 2 seconds but then the accessory goes online. With the Eve app or the Controller app this issue is not present.
543
+
544
+ Solved with the version 17.5 of the HomePod/AppleTV.
545
+
546
+ ## Home Assistant
547
+
548
+ So far is the only controller supporting some Matter 1.2 and 1.3 device type:
549
+
550
+ - air quality sensor (Matter 1.2)
551
+
552
+ Also supports (probably only like BooleanState cluster):
553
+
554
+ - waterFreezeDetector (Matter 1.3)
555
+ - waterLeakDetector (Matter 1.3)
556
+ - rainSensor (Matter 1.3)
557
+
558
+ HA also support electrical measurements from EveHistoryCluster (used in Matterbridge plugins)
559
+
560
+ ## Home Assistant issues (Matter Server for HA is still in Beta)
561
+
562
+ - If HA doesn't show all devices, reload the Matter Server Integration or reboot HA
563
+ - Home Assistant doesn't seem to always react when a device is removed from the bridge: they remain in HA unavailable forever...
564
+ - Version 6.1.2 is stable.
565
+ - Use Apple Home when you have to choose the controller type even if you pair Matterbridge directly with HA.
566
+
567
+ ## Google Home
568
+
569
+ No issues reported so far.
570
+
571
+ ## Alexa
572
+
573
+ Tested by Tamer Salah
574
+
575
+ Alexa needs the standard port 5540 to pair (from matter.js readme).
576
+
577
+ There is no support for these Matter device types:
578
+
579
+ - pressure sensor
580
+ - flow sensor
581
+ - light sensor
582
+
583
+ In the zigbee2mqtt and shelly plugins select the option to expose
584
+ the switch devices like light or outlet cause they don't show up like switch
585
+ (Matterbridge uses a modified switch device type without client cluster).
586
+
587
+ ## SmartThings
588
+
589
+ Tested by Tamer Salah
590
+
591
+ No issues reported so far.
592
+
593
+ Supports also:
594
+
595
+ - air Quality Sensor
596
+ - smoke Co Alarm
597
+
598
+ ## eWeLink
599
+
600
+ Tested by Tamer Salah
601
+
602
+ eWeLink needs the standard port 5540 for commissioning.
603
+
604
+ ## Tuya/Smart Life
605
+
606
+ Check the matter.js readme.
607
+
608
+ # Contribution Guidelines
609
+
610
+ Thank you for your interest in contributing to my project!
611
+
612
+ I warmly welcome contributions to this project! Whether it's reporting bugs, proposing new features, updating documentation, or writing code, your help is greatly appreciated.
613
+
614
+ ## Getting Started
615
+
616
+ - Fork this repository to your own GitHub account and clone it to your local device.
617
+ - Make the necessary changes and test them out
618
+ - Commit your changes and push to your forked repository
619
+
620
+ ## Submitting Changes
621
+
622
+ - Create a new pull request against the dev from my repository and I'll be glad to check it out
623
+ - Be sure to follow the existing code style
624
+ - Add unit tests for any new or changed functionality if possible
625
+ - In your pull request, do describe what your changes do and how they work
626
+
627
+ ## Code of Conduct
628
+
629
+ We believe in a welcoming and respectful community for all. Please make sure to follow our [Code of Conduct](LINK_TO_CODE_OF_CONDUCT) in all your interactions with the project.
630
+
631
+ ## Support
632
+
633
+ If you find this project helpful and you wish to support the ongoing development, you can do so by buying me a coffee.
634
+ On my side I sponsor the packages that I use in this project. It would be nice to have sponsors too.
635
+ Click on the badge below to get started:
636
+
637
+ <a href="https://www.buymeacoffee.com/luligugithub">
638
+ <img src="./yellow-button.png" alt="Buy me a coffee" width="120">
639
+ </a>
640
+
641
+ Thank you for your support!