Skip to content

Commit

Permalink
Merge pull request #189 from Luligu/dev
Browse files Browse the repository at this point in the history
Release 1.6.7
  • Loading branch information
Luligu authored Dec 16, 2024
2 parents 21bd61e + b74d394 commit ee4a821
Show file tree
Hide file tree
Showing 24 changed files with 956 additions and 780 deletions.
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,30 @@ Tamer (https://github.com/tammeryousef1006) has created the Matterbridge Discord
In this release some device types and the OnOff, LevelControl and ColorControl have been updated to be fully compliant with Matter 1.3 specifications.
It is possible that some controllers see them as new devices or need time to read the new clusters. It can be useful after the upgrade to power off the controller, wait a few minutes and power it on again.

## [1.6.7] - 2024-12-15

### Added

- [readme]: Update README to clarify Node.js installation instructions and emphasize LTS version.
- [deviceTypes]: Add airPurifier definition.
- [deviceTypes]: Add pumpDevice definition.
- [clusters]: Add PumpConfigurationAndControl cluster.
- [clusters]: Add ValveConfigurationAndControl cluster.

### Changed

- [Docker]: Add matterbridge-hass to Dockerfile for latest and main builds.
- [edge]: Various fixes to edge mode.
- [package]: Update dependencies.

### Fixed

- [Device]: Fix addChildDeviceType methods to include debug parameter in MatterbridgeDevice instantiation.

<a href="https://www.buymeacoffee.com/luligugithub">
<img src="./yellow-button.png" alt="Buy me a coffee" width="120">
</a>

## [1.6.6] - 2024-12-12

### Added
Expand Down
16 changes: 10 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,10 @@ A special thank to Apollon77 for his incredible work.

## Prerequisites

To run Matterbridge, you need either a [Node.js](https://nodejs.org/en/download/package-manager) environment or [Docker](https://docs.docker.com/get-started/get-docker/) installed on your system.
To run Matterbridge, you need either a [Node.js](https://nodejs.org/en) environment or [Docker](https://docs.docker.com/get-started/get-docker/) installed on your system.

If you don't have Node.js already install, please use this method to install it on a debian device: https://github.com/nodesource/distributions.
The supported versions of node are 18, 20 and 22. Please install node 22.
The supported versions of node are 18, 20 and 22. Please install node 22 LTS.
Nvm is not a good choice and should not be used for production.

If you don't have Docker already install, please use this method to install it on a debian device: https://docs.docker.com/desktop/setup/install/linux/debian/.
Expand Down Expand Up @@ -226,14 +226,18 @@ It exposes:
- a light with onOff
- a light with onOff and levelControl (dimmer)
- a light with onOff, levelControl and colorControl (with XY, HS and CT) clusters
- a light with onOff, levelControl and colorControl (with HS only) clusters
- a light with onOff, levelControl and colorControl (with XY only) clusters
- a light with onOff, levelControl and colorControl (with HS and CT) clusters
- a light with onOff, levelControl and colorControl (with XY and CT) clusters
- a light with onOff, levelControl and colorControl (with CT only) clusters
- an outlet (plug) with onOff cluster
- a cover with windowCovering cluster
- a lock with doorLock cluster
- a thermo with thermostat cluster and 3 sub endpoints with flowMeasurement cluster, temperatureMeasurement cluster
- a thermo autoMode (i.e. with Auto Heat and Cool features) with thermostat cluster and 3 sub endpoints with flowMeasurement cluster, temperatureMeasurement cluster
and relativeHumidityMeasurement cluster (to show how to create a composed device with sub endpoints)
- a thermo heat only with two external temperature sensors (tagged like Indoor and Outdoor)
- a thermo cool only
- an airConditioner device
- an airPurifier device with temperature and humidity sensor (supported by Apple Home)
- a fan with FanControl cluster
- a rainSensor device
- a waterFreezeDetector device
Expand Down Expand Up @@ -378,7 +382,7 @@ Then, from the dots menu in the frontend, download the `matterbridge.log` and `m

# Known general issues

## Session XYZ does not exist
## Session XYZ does not exist or Cannot find a session for ID XYZ

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.
After some time, the controller will reconnect.
Expand Down
1 change: 1 addition & 0 deletions docker/Dockerfile.latest
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ RUN npm install -g npm@latest && \
matterbridge-zigbee2mqtt \
matterbridge-somfy-tahoma \
matterbridge-shelly \
matterbridge-hass \
matterbridge-example-accessory-platform \
matterbridge-example-dynamic-platform \
matterbridge-eve-door \
Expand Down
2 changes: 2 additions & 0 deletions docker/Dockerfile.main
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ WORKDIR /app
COPY ./package.json ./
COPY ./package-lock.json ./
COPY ./tsconfig.json ./
COPY ./tsconfig.production.json ./
COPY ./src ./src
COPY ./frontend/build ./frontend/build
RUN npm ci && npm run build && npm link
Expand All @@ -26,6 +27,7 @@ RUN npm install -g --omit=dev matterbridge-example-dynamic-platform
RUN npm install -g --omit=dev matterbridge-zigbee2mqtt
RUN npm install -g --omit=dev matterbridge-somfy-tahoma
RUN npm install -g --omit=dev matterbridge-shelly
RUN npm install -g --omit=dev matterbridge-hass
RUN npm install -g --omit=dev matterbridge-eve-door
RUN npm install -g --omit=dev matterbridge-eve-motion
RUN npm install -g --omit=dev matterbridge-eve-energy
Expand Down
6 changes: 3 additions & 3 deletions frontend/build/asset-manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"files": {
"main.css": "./static/css/main.823e08b6.css",
"main.js": "./static/js/main.a742de4e.js",
"main.js": "./static/js/main.4dd7e165.js",
"static/js/453.abd36b29.chunk.js": "./static/js/453.abd36b29.chunk.js",
"static/media/roboto-latin-700-normal.woff2": "./static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2",
"static/media/roboto-latin-500-normal.woff2": "./static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2",
Expand Down Expand Up @@ -61,11 +61,11 @@
"static/media/roboto-greek-ext-400-normal.woff": "./static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff",
"index.html": "./index.html",
"main.823e08b6.css.map": "./static/css/main.823e08b6.css.map",
"main.a742de4e.js.map": "./static/js/main.a742de4e.js.map",
"main.4dd7e165.js.map": "./static/js/main.4dd7e165.js.map",
"453.abd36b29.chunk.js.map": "./static/js/453.abd36b29.chunk.js.map"
},
"entrypoints": [
"static/css/main.823e08b6.css",
"static/js/main.a742de4e.js"
"static/js/main.4dd7e165.js"
]
}
2 changes: 1 addition & 1 deletion frontend/build/index.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.a742de4e.js"></script><link href="./static/css/main.823e08b6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.4dd7e165.js"></script><link href="./static/css/main.823e08b6.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions frontend/build/static/js/main.4dd7e165.js.map

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion frontend/build/static/js/main.a742de4e.js.map

This file was deleted.

34 changes: 20 additions & 14 deletions frontend/src/components/Header.js
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,13 @@ function Header() {
<div className="header" style={{ flex: 1, display: 'flex', flexDirection: 'row', justifyContent: 'center', alignItems: 'center' }}>
<Tooltip title="Matterbridge status">
{online ? <span className="status-enabled" style={{ cursor: 'default' }}>Online</span> : <span className="status-disabled" style={{ cursor: 'default' }}>Offline</span>}
</Tooltip>
<Tooltip title="Sponsor Matterbridge and its plugins">
<span className="status-sponsor" onClick={handleSponsorClick}>Sponsor</span>
</Tooltip>
{matterbridgeInfo.matterbridgeLatestVersion === undefined || matterbridgeInfo.matterbridgeVersion === matterbridgeInfo.matterbridgeLatestVersion ?
</Tooltip>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<Tooltip title="Sponsor Matterbridge and its plugins">
<span className="status-sponsor" onClick={handleSponsorClick}>Sponsor</span>
</Tooltip>
}
{matterbridgeInfo.matterbridgeLatestVersion === undefined || matterbridgeInfo.matterbridgeVersion === matterbridgeInfo.matterbridgeLatestVersion || matterbridgeInfo.readOnly ?
<Tooltip title="Matterbridge version"><span className="status-information" onClick={handleChangelogClick}>v.{matterbridgeInfo.matterbridgeVersion}</span></Tooltip> :
<Tooltip title="New Matterbridge version available, click to install"><span className="status-warning" onClick={handleUpdateClick}>Update v.{matterbridgeInfo.matterbridgeVersion} to v.{matterbridgeInfo.matterbridgeLatestVersion}</span></Tooltip>
}
Expand Down Expand Up @@ -290,11 +292,13 @@ function Header() {
<AnnouncementOutlinedIcon/>
</IconButton>
</Tooltip>
<Tooltip title="Update matterbridge">
<IconButton onClick={handleUpdateClick}>
<SystemUpdateAltIcon/>
</IconButton>
</Tooltip>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<Tooltip title="Update matterbridge">
<IconButton onClick={handleUpdateClick}>
<SystemUpdateAltIcon/>
</IconButton>
</Tooltip>
}
<Tooltip title="Restart matterbridge">
<IconButton onClick={handleRestartClick}>
<RestartAltIcon/>
Expand All @@ -313,10 +317,12 @@ function Header() {
</IconButton>
</Tooltip>
<Menu id="command-menu" anchorEl={menuAnchorEl} keepMounted open={Boolean(menuAnchorEl)} onClose={() => handleMenuClose('')} sx={{ '& .MuiPaper-root': { backgroundColor: '#e2e2e2' } }}>
<MenuItem onClick={() => handleMenuClose('update')}>
<ListItemIcon><SystemUpdateAltIcon /></ListItemIcon>
<ListItemText primary="Update" />
</MenuItem>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<MenuItem onClick={() => handleMenuClose('update')}>
<ListItemIcon><SystemUpdateAltIcon /></ListItemIcon>
<ListItemText primary="Update" />
</MenuItem>
}
<MenuItem onClick={() => handleMenuClose('restart')}>
<ListItemIcon><RestartAltIcon /></ListItemIcon>
<ListItemText primary="Restart" />
Expand Down
22 changes: 14 additions & 8 deletions frontend/src/components/Home.js
Original file line number Diff line number Diff line change
Expand Up @@ -293,12 +293,14 @@ function Home() {

<div style={{ display: 'flex', flexDirection: 'column', height: '100%', width: '100%', gap: '20px' }}>

<div className="MbfWindowDiv" style={{ flex: '0 0 auto', width: '100%', overflow: 'hidden' }}>
<div className="MbfWindowHeader">
<p className="MbfWindowHeaderText">Install add plugin</p>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<div className="MbfWindowDiv" style={{ flex: '0 0 auto', width: '100%', overflow: 'hidden' }}>
<div className="MbfWindowHeader">
<p className="MbfWindowHeaderText">Install add plugin</p>
</div>
<AddRemovePlugins ref={refAddRemove} plugins={plugins} reloadSettings={reloadSettings}/>
</div>
<AddRemovePlugins ref={refAddRemove} plugins={plugins} reloadSettings={reloadSettings}/>
</div>
}

<div className="MbfWindowDiv" style={{ flex: '0 0 auto', width: '100%', overflow: 'hidden' }}>
<div className="MbfWindowDivTable" style={{ flex: '0 0 auto', overflow: 'hidden' }}>
Expand All @@ -321,7 +323,7 @@ function Home() {
<td><Tooltip title={plugin.path}>{plugin.name}</Tooltip></td>
<td>{plugin.description}</td>

{plugin.latestVersion === undefined || plugin.latestVersion === plugin.version ?
{plugin.latestVersion === undefined || plugin.latestVersion === plugin.version || (matterbridgeInfo && matterbridgeInfo.readOnly) ?
<td><Tooltip title="Plugin version">{plugin.version}</Tooltip></td> :
<td><Tooltip title="New plugin version available, click to install"><span className="status-warning" onClick={() => handleUpdatePlugin(index)}>Update v.{plugin.version} to v.{plugin.latestVersion}</span></Tooltip></td>
}
Expand All @@ -333,12 +335,16 @@ function Home() {
<>
{matterbridgeInfo && matterbridgeInfo.bridgeMode === 'childbridge' && !plugin.error && plugin.enabled ? <Tooltip title="Shows the QRCode or the fabrics"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => handleSelectQRCode(index)} size="small"><QrCode2 /></IconButton></Tooltip> : <></>}
<Tooltip title="Plugin config"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => handleConfigPlugin(index)} size="small"><Settings /></IconButton></Tooltip>
<Tooltip title="Remove the plugin"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => { handleActionWithConfirmCancel('Remove plugin', 'Are you sure? This will remove also all the devices and configuration in the controller.', 'remove', index); {/* handleRemovePlugin(index);*/} } } size="small"><DeleteForever /></IconButton></Tooltip>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<Tooltip title="Remove the plugin"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => { handleActionWithConfirmCancel('Remove plugin', 'Are you sure? This will remove also all the devices and configuration in the controller.', 'remove', index); {/* handleRemovePlugin(index);*/} } } size="small"><DeleteForever /></IconButton></Tooltip>
}
{plugin.enabled ? <Tooltip title="Disable the plugin"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => { handleActionWithConfirmCancel('Disable plugin', 'Are you sure? This will remove also all the devices and configuration in the controller.', 'disable', index); {/* handleEnableDisablePlugin(index);*/}} } size="small"><Unpublished /></IconButton></Tooltip> : <></>}
{!plugin.enabled ? <Tooltip title="Enable the plugin"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => handleEnableDisablePlugin(index) } size="small"><PublishedWithChanges /></IconButton></Tooltip> : <></>}
<Tooltip title="Plugin help"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => handleHelpPlugin(index)} size="small"><Help /></IconButton></Tooltip>
<Tooltip title="Plugin version history"><IconButton style={{padding: 0}} className="PluginsIconButton" onClick={() => handleChangelogPlugin(index)} size="small"><Announcement /></IconButton></Tooltip>
<Tooltip title="Sponsor the plugin"><IconButton style={{padding: 0, color: '#b6409c'}} className="PluginsIconButton" onClick={() => handleSponsorPlugin(index)} size="small"><Favorite /></IconButton></Tooltip>
{matterbridgeInfo && !matterbridgeInfo.readOnly &&
<Tooltip title="Sponsor the plugin"><IconButton style={{padding: 0, color: '#b6409c'}} className="PluginsIconButton" onClick={() => handleSponsorPlugin(index)} size="small"><Favorite /></IconButton></Tooltip>
}
</>
</td>
<td>
Expand Down
Loading

0 comments on commit ee4a821

Please sign in to comment.