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 🙏

© 2024 – Pkg Stats / Ryan Hefner

homebridge-bluetooth-soundbutton

v0.0.2

Published

Homebridge Bluetooth Sound Buttons using Alsa speakers for Raspberry Pi and Linux systems.

Downloads

11

Readme

Homebridge (Bluetooth) Sound Buttons

This plugin/platform allows you to create switches (buttons) like light switches / dimmer switches (for volume faders and on/off state) that play sounds through the command line launched from HomeBridge using Apple HomeKit. These are useful for automating sounds delivered through speakers using the Alsa channels or built in sound card. For example, if someone opens a door, you could have the speaker on your Homebridge (Raspberry Pi for example) server play a sound, or you could have it play a sound through bluetooth to one, or multiple speakers.

When the switch / outlet for a sound is turned on, the sound will start playing through the configured speaker and when the sound is finished, the outlet automatically turns off. Dimmer switches are coming to control the volume of the sound emulating a light dimmer.

I created this in an effort to setup a bluetooth system using multiple speaker groups from my Rasperry Pi 3 Homebridge through the bluetooth adapater and multiple speakers. Did I succeed? Well, not completely, but it was a blast getting this far... I'll tell you more about that as this story goes on and give some insights to bluetooth and Raspberry Pi as of (March 2018) without Pulse Audio using BlueAlsa as that's how Raspberry Pi running on Stretch is configured by default out of the "box".

Sound Buttons and Automation Triggers in iOS Apple HomeKit from Homebridge

Homebridge / HomeKit Device Limitation Considerations

There are limitations in homebridge and Apple's Homekit where up to 100 devices can be exposed. If you have a busy Smart Home with a lot of devices polling and refreshing, it can slow down your HomeKit response times and you'll start to see "Updating" while waiting on the status of your devices. For example, I use a Philips Hue Hub and a Samsung SmartThings hub with a few other homebridge plugins and running about 70 devices using light bulbs, plugs, door locks, cameras, sensors and more, so I see "updating" a lot when using the Home app on iOS even with a dedicated iPad as my bridge. Therefore, I recommend you create a separate installation of your homebridge (see Standalone Install below) for running sounds and then add it to your Apple Home app via an accessory. This way... you can have up to 100 sounds and all of your devices all in one app :)

Installation

You'll need to setup and follow the homebridge instructions here: https://github.com/nfarina/homebridge

Raspberry Pi Users, check this out: https://github.com/nfarina/homebridge/wiki/Running-HomeBridge-on-a-Raspberry-Pi

Standard Installation - Adding to your Existing Homebridge:

	npm install -g homebridge-bluetooth-soundbutton

Example Homebridge config.json

"platforms": [

        {
           "platform": "SoundButton",
           "name": "SoundButton",
           "debugging" : true,
           "defaultSoundPlayer" : "/usr/bin/omxplayer.bin",
           "enableAlsaOutput": false,
           "accessories" : [

                {
                    "accessory": "SoundButton",
                    "id" : "000000000001",
                    "name" : "ILY Erock",
                    "soundFile": "/home/pi/sounds/ILoveYou.mp3",
                    "soundOptions" : ["-o", "alsa:default"],
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 60,
                    "debugging" : true,
                    "soundEnabled" : true
                },
                {
                    "accessory": "SoundButton",
                    "id" : "000000000002",
                    "name" : "Metallica Hates Mp3",
                    "soundFile": "/home/pi/sounds/metallica.mp3",
                    "soundOptions" : ["-o", "alsa:bluetoothSpeaker1"],
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 60,
                    "debugging" : true,
                    "soundEnabled" : true
                },
	    
                {
                    "accessory": "SoundButton",
                    "id" : "000000000006",
                    "name" : "Unicorns",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/unicornsEverywhere.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                },

                {
                    "accessory": "SoundButton",
                    "id" : "000000000007",
                    "name" : "MotionDownstairs",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/motionDownstairs.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                },

                {
                    "accessory": "SoundButton",
                    "id" : "000000000008",
                    "name" : "BackDoor Opened",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/backDoorOpened.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                },

                {
                    "accessory": "SoundButton",
                    "id" : "000000000009",
                    "name" : "FrontDoor Opened",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/frontDoorOpened.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                },

                {
                    "accessory": "SoundButton",
                    "id" : "000000000010",
                    "name" : "GarageDoor Opened",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/garageDoorOpened.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                },

                {
                    "accessory": "SoundButton",
                    "id" : "000000000011",
                    "name" : "GarageSideDoor Opened",
                    "soundPlayer" : "/usr/bin/aplay",
                    "soundOptions" : ["-D", "echo1"],
                    "soundFile": "/home/pi/sounds/garageSideDoorOpened.wav",
                    "repeat" : 0,
                    "loop" : false,
                    "volume" : 90,
                    "debugging" : true,
                    "soundEnabled" : true
                }

           ]
        }
    ]

Rasberry Pi Homebridge Standalone (Separate) Sound Server:

Assuming you're running systemd and using systemctl to manage your Homebridge install under the 'pi' user:

	[pi@homebridge] mkdir ~/.homebridge-sounds
	[pi@homebridge] nano ~/.homebridge-sounds/config.json
	[pi@homebridge] cd /home/pi/.homebridge-sounds/
	[pi@homebridge] mkdir ~/.homebridge-sounds/sounds
	[pi@homebridge] cd /home/pi/.homebridge-sounds/sounds
	[pi@homebridge] pwd

The output will be where you place your sound files, however you choose what directory you would like:

	[pi@homebridge:] cd ~/.homebridge-soundserver/sounds
	[pi@homebridge:] pwd
	/home/pi/.homebridge-soundserver/sounds (<--- This is your config sound path)

Setup a full homebridge config.json for this separate homebridge instance:

{
	"bridge": {
		"name": "PiSound",
		"username": "A3:B1:C2:A3:E4:D5",
		"port": 51829,
		"pin": "123-45-678"
	},
    	"description": "Pi Sound Server",

	"platforms": [{
	       "platform": "SoundButton",
	       "name": "SoundButton",
	       "debugging" : true,
	       "defaultSoundPlayer" : "/usr/bin/omxplayer.bin",
	       "enableAlsaOutput": false,
	       "accessories" : [
		    {
			"accessory": "SoundButton",
			"id" : "000000000001",
			"name" : "I Love You",
			"soundFile": "/home/pi/.homebridge-sounds/sounds/ILoveYou.mp3",
			"soundOptions" : ["-o", "alsa:echo1"],
			"repeat" : 0,
			"loop" : false,
			"volume" : 60,
			"debugging" : true,
			"soundEnabled" : true
		    },

		    {
			"accessory": "SoundButton",
			"id" : "000000000002",
			"name" : "MotionDownstairs",
			"soundPlayer" : "/usr/bin/aplay",
			"soundOptions" : ["-D", "speakerGroup1"],
			"soundFile": "/home/pi/.homebridge-sounds/sounds/motionDownstairs.wav",
			"repeat" : 0,
			"loop" : false,
			"volume" : 90,
			"debugging" : true,
			"soundEnabled" : true
		    },

		    {
			"accessory": "SoundButton",
			"id" : "000000000003",
			"name" : "BackDoor Opened",
			"soundPlayer" : "/usr/bin/aplay",
			"soundOptions" : ["-D", "alexa"],
			"soundFile": "/home/pi/.homebridge-sounds/sounds/backDoorOpened.wav",
			"repeat" : 0,
			"loop" : false,
			"volume" : 90,
			"debugging" : true,
			"soundEnabled" : true
		    },

		    {
			"accessory": "SoundButton",
			"id" : "000000000004",
			"name" : "FrontDoor Opened",
			"soundPlayer" : "/usr/bin/aplay",
			"soundOptions" : ["-D", "default"],
			"soundFile": "/home/pi/.homebridge-sounds/sounds/frontDoorOpened.wav",
			"repeat" : 0,
			"loop" : false,
			"volume" : 90,
			"debugging" : true,
			"soundEnabled" : true
		    },

		    {
			"accessory": "SoundButton",
			"id" : "000000000005",
			"name" : "GarageDoor Opened",
			"soundPlayer" : "/usr/bin/aplay",
			"soundOptions" : ["-D", "echo1"],
			"soundFile": "/home/pi/.homebridge-sounds/sounds/garageDoorOpened.wav",
			"repeat" : 0,
			"loop" : false,
			"volume" : 90,
			"debugging" : true,
			"soundEnabled" : true
		    },

		    {
			"accessory": "SoundButton",
			"id" : "000000000007",
			"name" : "I AM Computer",
			"soundPlayer" : "/usr/bin/aplay",
			"soundOptions" : ["-D", "echo1"],
			"soundFile": "/home/pi/.homebridge-sounds/sounds/helloComputer.wav",
			"repeat" : 0,
			"loop" : false,
			"volume" : 90,
			"debugging" : true,
			"soundEnabled" : true
		    }
	       ]
	    }
	]
}

Raspberry Pi systemd / systemctl config:

	[pi@homebridge] sudo cp /etc/default/homebridge /etc/default/homebridge-sounds
	[pi@homebridge] sudo cp /etc/systemd/system/homebridge.service /etc/systemd/system/homebridge-sounds.service

Now edit sudo nano /etc/default/homebridge-sounds and here's how my file looks:

# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json

HOMEBRIDGE_SOUNDS_OPTS=-D -U /home/pi/.homebridge-sounds/ -D -P /home/pi/.homebridge-sounds 
# -P <dir> is Optional for development directory:

# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge-sounds
DEBUG=*

Now edit sudo nano /etc/systemd/system/homebridge-sounds.service and here's how my file looks:

[Unit]
Description=Homebridge Sound Server Node.js HomeKit Server
After=syslog.target network-online.target

[Service]
Type=simple
User=pi
EnvironmentFile=/etc/default/homebridge-sounds
# Adapt this to your specific setup (could be /usr/bin/homebridge)
# See comments below for more information
ExecStart=/usr/bin/homebridge $HOMEBRIDGE_SOUNDS_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Next reload the systemd daemon and set the sound server to boot:

	[pi@homebridge] sudo systemctl daemon-reload
	[pi@homebridge] sudo systemctl enable homebridge-sounds
	[pi@homebridge] sudo systemctl start homebridge-sounds
	[pi@homebridge] journalctl -f -u homebridge-sounds

You should be able to see the logs and the next step is to add this new homebridge "Pi Sound Server" with the PIN number you created in the config file above.

You can also take a look at ls ~/.homebridge-sounds to see if you now have an accessories and persist folder:

	pi@homebridge:~/.homebridge/accessories $ ls -alh ~/.homebridge-sounds/
	total 32K
	drwxr-xr-x  6 pi pi 4.0K Mar 28 12:55 .
	drwxr-xr-x 27 pi pi 4.0K Mar 28 11:46 ..
	drwxr-xr-x  2 pi pi 4.0K Mar 28 12:55 accessories
	-rwxr--r--  1 pi pi 7.3K Mar 28 12:52 config.json
	drwxr-xr-x  2 pi pi 4.0K Mar 28 12:55 persist
	drwxr-xr-x  2 pi pi 4.0K Mar 28 12:13 sounds

Now you can go to your Home app on your iOS device and pair the new PiSound bridge and gain access to the sound switches.

Note: I created a separate room for my sounds called 'Sounds' and then ensured that 'Include in Favorites' is unchecked. All of my sounds are now in the "Sounds" room and I can setup my Automation triggers.