Giter VIP home page Giter VIP logo

whistle-switch's Introduction

The Whistle Switch

Control Homekit by whistling ๐ŸŽถ

I built this during my batch at the Recurse Center in 2021. I whistle a lot, and I wanted to put it to some constructive use!

Setup

The easiest way to install the switch is with yarn or npm.

$ yarn global add whistle-switch

If you install it globally, then you can run it from wherever.

$ whistle-switch

Raspberry PI

If you want to run whistle-switch on a Raspberry PI you need to tell it where to find Chromium, because the version from NPM doesn't work the PI's ARM processor.

WHISTLE_SWITCH_CHROME_EXECUTABLE_PATH=$(which chromium-browser) whistle-switch

For more info, check out my post on running headless chrome on a PI.

Connect with Homekit

Once the switch is running on your local network, you should be able to add it to Homekit on your iOS device.

Detailed Homekit Setup
1-add-accessory Select "More Options.." from the Add Accessory card.
2-select-whistle-switch Tap the accessort called "Whistle Switch ..."
3-uncertified-accessory Tap "Add Anyway" when you're prompted about an "uncertified" accessory.
4-setup-code The default setup code is "123-45-678", but you can change it to anything you want using the WHISTLE_SWITCH_SETUP_CODE environment variable.

Whistle "Buttons"

The switch has three built-in "buttons" that recognize different musical patterns. It'll try to match patterns regardless of key or rhythm.

Homekit Button Pattern Example
Button 1 One Three Five C E G
Button 2 Five Three One G E C
Button 3 One Two One Two One C D C D C

Homekit "Button" Map

Note: Right now, whistle-switch only triggers the "Single Press" action.

Whistle Switch Homekit button map

Advanced Configuration

You'll find the default configs in controller.js. The switch should work just fine with the defaults but you can override them by setting local environment variables.

Environment Variable Default
WHISTLE_SWITCH_CHROME_EXECUTABLE_PATH
WHISTLE_SWITCH_DEBUG false
WHISTLE_SWITCH_ID colbyr.whistle-switch.v1
WHISTLE_SWITCH_LISTENER_PORT 47130
WHISTLE_SWITCH_PORT 47130
WHISTLE_SWITCH_SETUP_CODE 123-45-678
WHISTLE_SWITCH_USERNAME 27:52:11:F5:BC:05

Resetting the switch

If your whistle-switch gets into a bad state with your homekit setup, you can reset your install.

First off, change WHISTLE_SWITCH_USERNAME in your .env file to a new value.

Then remove the persist directory if it exists.

rm -rf persist

Start the switch again, and you should be able to connect to Homekit as a completely new accessory.

whistle-switch's People

Contributors

colbyr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.