npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

node-switchbot

v4.0.1

Published

The node-switchbot is a Node.js module which allows you to control your Switchbot Devices through Bluetooth (BLE) with automatic OpenAPI fallback.

Downloads

4,821

Readme

node-switchbot

Node-SwitchBot

npm version npm downloads

The node-switchbot is a Node.js module that allows you to interact with various SwitchBot devices. You can control your SwitchBot (Bot)'s arm, operate your SwitchBot Curtain, and manage your SwitchBot Lock. Additionally, you can monitor temperature and humidity using the SwitchBot Thermometer & Hygrometer (Meter), and check the status of the SwitchBot Motion Sensor and SwitchBot Contact Sensor.

This module now supports both Bluetooth Low Energy (BLE) and the SwitchBot OpenAPI, providing more flexibility and options for interacting with your devices.

Please note that most of this module was developed by referencing the official BLE API and OpenAPI documentation. However, some functionalities were developed through trial and error, so there might be inaccuracies in the information obtained from this module.


Installation

To install the node-switchbot module within your project, use the following command:

$ npm install --save node-switchbot

Quick Start (v4.0.0)

v4.0.0 introduces a unified hybrid approach that automatically uses BLE when available with seamless API fallback.

Basic Usage

import { SwitchBot } from 'node-switchbot'

const switchbot = new SwitchBot({
  token: 'YOUR_TOKEN',      // OpenAPI token (optional for BLE-only)
  secret: 'YOUR_SECRET',    // OpenAPI secret (optional for BLE-only)
  enableBLE: true,          // Enable BLE discovery (Linux/macOS)
  enableFallback: true,     // Auto-fallback between BLE/API
})

// Discover all devices (BLE + API)
const devices = await switchbot.discover()

// Control devices
const bot = switchbot.devices.get('YOUR_DEVICE_ID')
await bot.press()

// Get status  
const status = await bot.getStatus()
console.log(status)

// Cleanup
await switchbot.cleanup()

Device Control Examples

// Bot - Press/Switch control
await bot.turnOn()
await bot.turnOff()
await bot.press()

// Bot with Password Protection (BLE only)
const protectedBot = new WoHand({ id: 'YOUR_BOT_ID', password: 'A1b2' })
await protectedBot.setPassword('A1b2')  // Set 4-char alphanumeric password
await protectedBot.press()              // Commands are automatically encrypted
await protectedBot.clearPassword()      // Remove password protection

// Curtain - Position control
await curtain.open()
await curtain.close()
await curtain.setPosition(50)  // 50% open

// Lock - Lock/Unlock
await lock.lock()
await lock.unlock()

// Bulb - Color and brightness
await bulb.turnOn()
await bulb.setBrightness(80)
await bulb.setColor(255, 0, 0)  // Red

// Meter - Read sensors
const meterStatus = await meter.getStatus()
console.log(meterStatus.temperature, meterStatus.humidity)

See the examples directory for more usage patterns.


BLE (Bluetooth Low Energy)

To see a breakdown of how to use the BLE functionality of this project, visit the BLE (Bluetooth Low Energy) documentation.

OpenAPI

To see a breakdown of how to use the OpenAPI functionality of this project, visit the OpenAPI documentation.


Migration from v3.x

Breaking Changes in v4.0.0:

  • Unified API: Single SwitchBot class replaces separate SwitchBotBLE and SwitchBotOpenAPI classes
  • 🔄 Automatic Discovery: Combined BLE + OpenAPI discovery in one call
  • 🛡️ Automatic Fallback: BLE commands automatically fall back to API on failure
  • 📦 Device Manager: Access devices via switchbot.devices.get(id) instead of direct discovery results
  • 🏷️ TypeScript: Full TypeScript rewrite with comprehensive type definitions
  • ⚠️ No Backward Compatibility: v3.x APIs are not supported - migration required

Migration Example:

// v3.x (old)
import { SwitchBotBLE, SwitchBotOpenAPI } from 'node-switchbot'
const ble = new SwitchBotBLE()
const api = new SwitchBotOpenAPI(token, secret)

// v4.0.0 (new)
import { SwitchBot } from 'node-switchbot'
const switchbot = new SwitchBot({ token, secret, enableBLE: true })

References