UNPKG

matterbridge-switchbot

Version:
310 lines (231 loc) 9.68 kB
# Matterbridge SwitchBot Plugin A Matterbridge plugin that integrates SwitchBot devices with the Matter protocol, allowing you to control your SwitchBot devices through Matter-compatible smart home platforms like Apple HomeKit, Google Home, Amazon Alexa, and others. ## Features - **Full SwitchBot API v1.1+ Support**: Uses the latest SwitchBot API with enhanced security - **Wide Device Support**: Supports physical devices (Bot, Plug, Lights, Curtains) and infrared remote devices - **Matter Protocol Integration**: Exposes SwitchBot devices as Matter-compatible devices - **Real-time Status Updates**: Polls device status and updates Matter attributes accordingly - **Secure Authentication**: Implements SwitchBot's HMAC-SHA256 signature authentication - **UI Configuration**: Configure through Matterbridge's web interface - **TypeScript**: Fully typed for better development experience ## Supported Devices ### Physical Devices - **SwitchBot Bot**: Exposed as an on/off switch - **SwitchBot Plug** (Mini US/JP, Standard): Exposed as outlets - **SwitchBot Lights** (Color Bulb, Strip Light, Ceiling Light): Exposed as dimmable/color lights - **SwitchBot Curtain/Roller Shade**: Exposed as on/off switches (open/close) ### Infrared Remote Devices - **Air Conditioner**: Exposed as on/off switch - **TV**: Exposed as on/off switch - **Light**: Exposed as on/off switch - **Fan**: Exposed as on/off switch ## Prerequisites 1. **Matterbridge**: Version 3.0.7 or higher 2. **SwitchBot Account**: With API access enabled 3. **SwitchBot Token and Secret**: Obtained from the SwitchBot app ## Installation ### Method 1: Install from npm (Recommended) 1. **Install the plugin**: ```bash npm install -g matterbridge-switchbot ``` 2. **Add the plugin to Matterbridge**: - Open the Matterbridge web interface - Go to **Plugins****Add Plugin** - Search for "matterbridge-switchbot" or add it manually - Click **Install** ### Method 2: Install from source 1. **Clone this repository**: ```bash git clone https://github.com/derbirch/matterbridge-switchbot.git cd matterbridge-switchbot ``` 2. **Install dependencies**: ```bash npm install ``` 3. **Build the plugin**: ```bash npx tsc ``` 4. **Link the plugin to your Matterbridge installation**: ```bash npm link ``` 5. **Add the plugin to Matterbridge**: ```bash matterbridge -add /path/to/your/matterbridge-switchbot ``` ## Configuration ### Getting SwitchBot API Credentials 1. Open the SwitchBot app on your mobile device 2. Go to **Profile****Preferences** 3. Tap **App Version** 10 times to enable developer options 4. Go back and tap **Developer Options** 5. Generate your **Token** and **Secret** ### Plugin Configuration #### Via Matterbridge Web Interface (Recommended) 1. Open the Matterbridge web interface 2. Go to **Plugins****matterbridge-switchbot** 3. Click **Settings** or **Configure** 4. Fill in the configuration form: - **SwitchBot API Token**: Your SwitchBot API token - **SwitchBot API Secret**: Your SwitchBot API secret - **Polling Interval**: How often to check device status (default: 30 seconds) - **SwitchBot API Base URL**: API endpoint (default: https://api.switch-bot.com) 5. Click **Save** #### Via Configuration File (Alternative) Add the following configuration to your Matterbridge config file: ```json { "name": "SwitchBot", "type": "DynamicPlatform", "token": "your-switchbot-token", "secret": "your-switchbot-secret", "baseUrl": "https://api.switch-bot.com", "pollInterval": 30 } ``` #### Configuration Options | Option | Type | Required | Default | Description | |--------|------|----------|---------|-------------| | `token` | string | Yes | - | Your SwitchBot API token | | `secret` | string | Yes | - | Your SwitchBot API secret | | `baseUrl` | string | No | `https://api.switch-bot.com` | SwitchBot API base URL | | `pollInterval` | number | No | 30 | Status polling interval in seconds (minimum: 5) | ## Usage 1. **Start Matterbridge**: The plugin will automatically discover your SwitchBot devices 2. **Device Registration**: Devices will be registered with Matter and appear in your smart home app 3. **Control Devices**: Use your Matter-compatible smart home platform to control devices 4. **Status Updates**: Device status is automatically synchronized based on the polling interval ## Device Mapping ### Physical Devices - **Bot** → Matter On/Off Switch - **Plug** → Matter Outlet - **Color Bulb** → Matter Color Temperature Light (with brightness and color temperature control) - **Strip Light** → Matter Color Temperature Light (with brightness control) - **Ceiling Light** → Matter Color Temperature Light (with brightness and color temperature control) - **Curtain/Roller Shade** → Matter On/Off Switch (open = on, close = off) ### Infrared Devices - **All IR Devices** → Matter On/Off Switch (power on/off commands) ## API Reference ### SwitchBot API Integration The plugin uses SwitchBot API v1.1 with the following endpoints: - `GET /v1.1/devices` - Discover devices - `GET /v1.1/devices/{deviceId}/status` - Get device status - `POST /v1.1/devices/{deviceId}/commands` - Send device commands ### Authentication The plugin implements SwitchBot's secure authentication using: - HMAC-SHA256 signature generation - Timestamp-based nonce - Token and secret key validation ## Development ### Building from Source ```bash # Clone the repository git clone https://github.com/derbirch/matterbridge-switchbot.git cd matterbridge-switchbot # Install dependencies npm install # Build the project npx tsc # Run tests (if available) npm test ``` ### Project Structure ``` src/ ├── index.ts # Main plugin module (formerly module.ts) ├── switchbot-api.ts # SwitchBot API client └── device-manager.ts # Device discovery and management matterbridge-switchbot.schema.json # UI configuration schema dist/ # Compiled JavaScript output ``` ### Testing The plugin includes comprehensive unit tests: ```bash npm test # Run all tests npm run test:coverage # Run tests with coverage npm run test:watch # Run tests in watch mode ``` ## Troubleshooting ### Common Issues 1. **"SwitchBot API not initialized"** - Verify your token and secret are correct - Check that both token and secret are provided in configuration - Ensure you've enabled developer options in the SwitchBot app 2. **"Failed to get devices"** - Ensure your SwitchBot account has API access enabled - Verify your token hasn't expired - Check network connectivity - Verify the API base URL is correct 3. **Devices not appearing in Matter app** - Restart Matterbridge after configuration changes - Check Matterbridge logs for device registration errors - Ensure devices are online in the SwitchBot app - Verify the plugin is properly installed and configured 4. **Commands not working** - Verify device is online and responsive in SwitchBot app - Check if device type is supported - Review plugin logs for command errors - Ensure polling interval is not too aggressive 5. **Plugin not showing in Matterbridge UI** - Ensure the plugin is properly installed (`npm install -g matterbridge-switchbot`) - Check that the schema file is included in the package - Restart Matterbridge after installation - Verify Matterbridge version compatibility (>= 3.0.7) ### Debug Mode Enable debug logging in your Matterbridge configuration: ```json { "name": "SwitchBot", "type": "DynamicPlatform", "debug": true, ... } ``` ### Logs Check Matterbridge logs for detailed information: - Plugin initialization messages - Device discovery results - API communication status - Error messages and stack traces ## Contributing 1. Fork the repository 2. Create a feature branch: `git checkout -b feature-name` 3. Make your changes and add tests 4. Run tests: `npm test` 5. Submit a pull request ## License This project is licensed under the Apache-2.0 License - see the [LICENSE](LICENSE) file for details. ## Support - **Issues**: Report bugs and feature requests on [GitHub Issues](https://github.com/derbirch/matterbridge-switchbot/issues) - **Documentation**: Check the [Matterbridge documentation](https://github.com/Luligu/matterbridge) for general setup - **SwitchBot API**: Refer to the [official SwitchBot API documentation](https://github.com/OpenWonderLabs/SwitchBotAPI) ## Changelog ### v1.0.3 - Renamed `module.ts` to `index.ts` and updated `package.json` to reflect this change, which might help with Matterbridge UI discovery. - Added UI configuration schema for Matterbridge web interface - Fixed TypeScript compilation issues - Updated repository URLs and package metadata - Improved error handling and logging ### v1.0.2 - Fixed plugin loading mechanism - Updated dependencies and peer dependencies - Improved installation instructions ### v1.0.1 - Fixed plugin loading mechanism - Updated dependencies and peer dependencies - Improved installation instructions ### v1.0.0 - Initial release - Support for SwitchBot API v1.1 - Physical device support (Bot, Plug, Lights, Curtains) - Infrared device support (AC, TV, Light, Fan) - Matter protocol integration - Real-time status polling - Comprehensive test suite ## Acknowledgments - [Matterbridge](https://github.com/Luligu/matterbridge) - The bridge platform this plugin is built for - [SwitchBot](https://www.switch-bot.com/) - For providing the API and devices - [Matter](https://csa-iot.org/all-solutions/matter/) - The smart home standard