DIY Apple AirPrint/Play & Homekit on Rasperry Pi
Overview
Our HomePi was originally cobbled together to integrate older/non-complaint devices into the world of Apple AirPlay/Print. The little gizmo has evolved over time as devices change in/out around the house and now supports Apple HomeKit to integrate non-compliant 'smart' devices.
The HomePi has worked like a champ for years. This recipe is basically a retrace of my steps for future rebuilds, but may be useful to others.
Migrated to new site spring 2021 - original site/recipe @
http://ventures.tpedersen.net/projects/diyappleairplayprintandhomekitonraspberrypi
HomePi: Apple Air Print/Play & Homekit Services
Original: May 2014
Last Update: Nov 2020 (Much Easier!)
Background & Capabilities
Many of the techno problems around our home tend to revolve around integrating older equipment with modern devices or attempting to deal with the deluge of new 'smart' devices, each with its own App or interface. Our 'vintage' stereo and network printer were prime examples of the old world - simply not iPhone/iPad compatible in terms of streaming music or printing.
On the other end of the spectrum, we seemed to be constantly fumbling with a variety of apps provided with our newfangled smart home (lights, switches, appliances, etc) - Waaay too complicated!
The Raspberry Pi was originally dropped onto our network to fill the Air Gap by emulating Apple AirPlay and AirPrint services and ultimately added HomeKit services so Siri could begin helping out around the house.
Evolution
HomePi V1 (2014): Raspberry Pi 1 Model B used to integrate an old network printer into the Apple AirPrint world (Cups).
HomePi V2 (2015): Added AirPlay services (Shareport-sync) services to allow iPads/iPhones to stream music to Bose Wave Radio.
HomePi V3 (2018): Homekit services (homebridge) added to pull together our 'smart' home. Integrates non-compliant smart devices into Apple Homekit world. V3 also involved simplified OS (DietPi) and RPi 3 Model B hardware.
Home Pi V4 (2020): V4 involved an OS (Buster) upgrade and more simplification. AirPrint services were dropped due to new network printer that no longer needed help.
Level of Difficulty & Prep Time
A cheap, easy and fun little project - no programming required but Raspberry Pi/Linux knowledge will come in handy. 1-2 hours to get things installed and running.
Hardware
Our current HomePi hardware profile:
Sound Card: USB Audio Adapter (USB to to 3.5mm audio jack)*
MicroSD Card: Samsung 32GB MicroSD EVO Memory Card*
Audio Cable: 3.5mm Male to 2 RCA Male Stereo Audio Y Cable*
Power Supply: 2.5A Power Supply w/ On/Off button*
Case: Official Raspberry Pi 3 Case*
*Affiliate Links - Please note: I may get a kickback from Amazon!
Software
Dietpi is now used for the HomePi foundation. It provides a lite version Raspbian and includes a library of optimized Pi software packages.
Dietpi.com - Currently v7.0.2/Buster (Donate!)
Etcher.io - Much easier way to flash OS images to SD
AirPlay via Shairport-Sync option in DietPi Optimized Software
AirPrint via Cloudprint option in DietPi Optimized Software library
HomeKit - Smart Device integration via Homebridge Project
Step By Step
DietPi Install
Notes to self on OS Prep (DietPi IS Raspbian) and some handy optimized packages ...
Download latest DietPi and Etcher. Follow DietPi Quickstart Guide
// Originally used DietPi_RPi-ARMv6-Stretch.7z (~90MB Download) //Easiest to start DietPi install with Ethernet, keyboard & monitor then switch to ssh after first boot
Automatically resizes partitions, forces password changes and updates itself (~5min)
Tweak configuration via SSH using DietPi-config utility. Minimally, set the following:
DietPi-Config/Audio Options->Soundcard=usb-dac
// For shairport-sync w/ usb sound //DietPi-Config/Language&Regional->Local=en.US.UTF-8 + Timezone + Keyboard[us]
// Season to taste, keyboard and country! //DietPi-Config/Network Adapters->WiFi
// I setup WiFi @ this point and disconnect ethernet on next boot - Remember to Apply/Restart Network //DietPi-Config/Security->Change Hostname
// Changing Hostname will force reboot //
Install Software via SSH using DietPi-Software utility.
Software Optimized - Check the following:
Media Systems->Shairport Sync (for AirPlay)
System Stats->RPi-Monitor (nice web-based monitor)
Printing->CloudPrint (aka cups for AirPrint) - No longer available on DietPi, install CUPS
Homebridge is a manual install process, see below
Remember to scroll down to do the actual Install - select Go >> Start installation for selected software
Final/Favorite tweaks 'n such via command line:
Install favorite editor if you don't like nano. I like joe:
apt-get install joeDisabled WiFi Power Management to be safe
iwconfig wlan0 power off
AirPrint (Cups)
Our old printer finally passed away, so HomePi no longer provides AirPrint services, but here's the original raspbian recipe ... Last used on Stretch (cups 2.2.1) but it should be close, CUPS is pretty solid and common. Install/setup takes ~30 Mins. Here's the original guide, it may be updated for Buster and beyond.
Install avahi - required for network discovery
sudo apt-get install avahi-discoverInstalls CUPS and friends
sudo apt-get install cups cups-pdf python-cupsMod user (e.g. user pi) to be CUPS admin, it will be used to login to web interface
sudo usermod -aG lpadmin piMake sure CUPS and friends are running after the install
ps -A | grep cups
ps -A | grep avahi
CUPS Config, phase 1: cupsd.conf
Edit /etc/cups/cupsd.conf to permit remote browser access via port 631. Double check Lynsay's guide, there were a number of edits here ... in case I miss one
Comment out Localhost restriction & add line to permit access via port 631
#Listen localhost:631
Port 631Permit local network access to cups paths via local network - add "Allow @Local" line right after "Order allow,deny" in following sections for http(s) access to server, admin, config and log pages.
<Location />
Order allow,deny
Allow @Local
</Location>
<Location /admin>
Order allow,deny
Allow @Local
</Location>
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow @Local
</Location>
<Location /admin/log>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow @Local
</Location>Remember to bounce CUPS after config updates
sudo /etc/init.d/cups restart
CUPS Config, phase 2 - via CUPS web interface @ http://<your PI IP address>:631 (https in latest cups)
Log in to CUPS administration using pi system user & password
Administration page: check "Share Printers" and "Allow Remote Admin"
Administration/Add Printer - "Discovered Network Printers" found our Dell M5200 w/ a couple of tweaks:
Set "Printer Description" to match your printer, it is presented in iPhone/Pad's 'Select Printer" dialog
I uses Openprinting.org ppd file to set up our printer - https://www.openprinting.org/printers
Remember to check the "Share this Printer" box
HowTo Use AirPrint to print from your iPhone, iPad, or iPod touch by Apple Support
AirPlay (Shairport-sync)
Shairport-sync is fully installed via DietPi-Software utility (above). Project page @ https://github.com/mikebrady/shairport-sync
One quick edit to config file @ /usr/local/etc/shairport-sync.conf:
Change the device "name" to something descriptive or it let it default to hostname - 'name' shows on ipad/iphone/itunes as speaker/destination.
general =
{
name = "Family Room Bose";
interpolation = "soxr";
};
Apples Support's article on using Apirplay - How to AirPlay Audio
HomeKit (HomeBridge)
HomeBridge is still not part of DietPi software library ... manual install required, but it's a LOT easier than it used to be!
This will still take some time, count on an hour with minimal plugin playtime!
Homepage/info @ homebridge.io, github.com/homebridge/homebridge & Raspberry Pi specifics @ .../wiki/Install-Homebridge-on-Raspbian
One important preliminary: Check for plugins for your smart devices before you go through all this install stuff - just to make sure you'll be able to control your device. Go to https://www.npmjs.com and search for "homebridge-<your dev>". For example "homebridge-wemo" or "homebridge-" to browse the library.
Also note - no need for sudo if you are logged in as root on DietPi
Install Steps are dissected from *new* HomeBridge on Raspian Lite instructions
Install Node.js
# setup repo
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
# install Node.js
sudo apt-get install -y nodejs gcc g++ make python
# test node is working
node -v
# upgrade npm (version 6.13.4 has issues with git dependencies)
sudo npm install -g npmInstall Homebridge and Homebridge Config UI X
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
# To setup Homebridge as a service that will start on boot use hb-service command.
sudo hb-service install --user homebridgeLog into Homebridge Config UI X (This is NICE!) - Default uc/pw = admin/admin
http://<ip address of your server>:8581Couple of name changes in Configuration Reference Section of guide
Note: Service management is now via sudo hb-service restart/stop/start/logs instead of systemctl
Config using Config UI X installed above.
The following is a blow-by-blow of our Smartthings and Nest upgrade - mostly for my sake!
Steps dissected from https://www.npmjs.com/package/homebridge-config-ui-xLog in via http://homepi:8581
Smartthings: Step by steps below MAY still need cleanup ... MUCH has changed since I installed original (pdlove) HomeBridge SmartThings!
Followed https://techtechandmoretech.com/guides/smartthings-homebridge/Via Browser: Smarthings IDE @ https://graph.api.smartthings.com/
Log in to SmartThings IDE (POS!) - I had to use my Samsung credentials
I ended up deleting old (pdlove) Smartthings App because Smartthings is CRAP! AND it wasn't easy! This may help - https://community.smartthings.com/t/this-smartapp-cant-be-deleted-at-this-time-because-it-is-installed-by-one-or-more-users/44845//
Go to MY SMARTAPPS and Add (upper right) NEW SMARTAPP
New SmartApp form: Clicked FROM CODE tab and (blindly) pasted code from https://raw.githubusercontent.com/tonesto7/st-community-installer/master/smartapps/tonesto7/st-community-installer.src/st-community-installer.groovy
Hit CREATE Button, then SAVE and PUBLISH (for me) buttons in upper right of response screen
Hit APP SETTINGS button (still upper right) scroll down OAuth and Enable
Hit UPDATE button on bottom of screen
On IOS (smarthings app has always been a friggin mess!) via NEW ST App
OLD ST App BECAUSE THAT IS WHAT INSTRUCTIONS SAID! (I made a mess doing it myself!)<Follow instructions EXACTLY>
emailed (yeesh!) config.json snippet for ST
Via SSH! Update the config.lson file using texted pasted into email from IOS!
Found config.json in /var/lib/homebridge/
Pasted clipping from email onto jsonlint.com to doublecheck/validate
Pasted clipping into /var/lib/homebridge/config.json
Had to empty and remove /var/lib/homebridge/accessories to get HB running
I was getting error: Cannot Add bridged accessory with same UUID read this
https://github.com/luisiam/homebridge-cmdswitch2/issues/8hb-service start (to get hb back up)
Back to IOS (round and round we go!), Home App:
I deleted old home and added new one using UI QR Code to reduce confusion
Fumbled around in IOS Home App until I settled all rooms, devices and favorites
Nest: Installed via Config UI X
homebridge-nest v4.4.9 (Nest plug-in for Homebridge using native Nest API)
Doc @ https://github.com/chrisjshull/homebridge-nestI still use Nest Account - pretty simple: Access Token from home.nest.com/session
(I'll update to Google account when forced to - this step is more complicated)
Set up IOS phone via https://support.apple.com/en-us/HT204893
if you forgot your pin/scan code dig it out of systemd journal like I did
sudo journalctl -u homebridge
Debugging: Troubleshooting Guide @ https://github.com/nfarina/homebridge/wiki/Basic-Trouble-Shooting
Running in terminal window is very helpful
See Also: Common Issues section in the README
Apple Home info @ https://www.apple.com/ios/home/
Touch-ups & Tweaks
Winter 2023 Update Notes
Some cleanup/updates: A couple of new "Smart" things to incorporate into the home and some forced plugin updates. Also removed the soundcard and cable to Bose - Airplay services no longer needed or used - HomePod sits right on top of Bose radio and sounds just as good! ... notes/log
Failed attempted an update to Buster, ended up with some clumsy network issues during install, decided to simply update for now.
DietPi Tweaks/Updates
dietpi-update v8.13.2->v8.14.2 ...
also did a - apt upgrade Y
dietpi-software - couple of changes
Removed shairport-sync, no longer need to offer Airplay services.
Added DietPi-Dashboard (backend only) - HomePi is now monitored via ServerPi on our network
Removed RPi-Monitor - replaced by Dashboard
dietpi-config
Disabled Audio - no longer needed
Homebridge
Update to v1.6.0 via UX
Plugins:
Replaced Homebridge Smarthings with Smarthings Plugin a while ago. It works and ia much simpler but some noticeable delays (slowly improving)
Updated new plugin to v1.5.0 - webhooks coming soon!
Uninstalled old plugin
Enough for now ... will do a rebuild using Bullseye in the spring, I think that should simplify this gizmo even more
Spring 2022 Update Notes
Spring cleaning during the winter ... some leftover HomePi updates. Should be good for a long while!
DietPi update from 7.5.2 to 8.1.2 ... no issues. Just let dietpi-update do it's thing!
Homebridge World
Homebridge update v1.3.6 to 1.4.0 ... no issues
Homebridge Plugins
HomebridgeUi update from v4.41.2 to 4.42
Homebridge Deebotecovacs update from v1.4.6 to 1.4.7 ... hmmm some odd chatter during update
Homebridge-hue update from v0.13.22 to v013.36
plugin recommends running on Node.js v16.13.2 or later ... Easy enough:
From Homebridge "How to Update Node.js" article, did one of these: hb-service update-node
Homebridge Nest update from v4.6.3 to 4.6.4
Homebridge Platform Wemo v3.3.1 - Replace with Homebridge-wemo v4.7.0
Platform Wemo was deprecated/replaced quite a while ago but w/out auto migration. Just hadn't taken time to deal w/ ramifications of automations and such - some old/original smart-stuff here
Step-by-step based on info @ https://www.npmjs.com/package/homebridge-platform-wemo
Backup Homebridge (... Backup/Restore)
Saved a copy of json from HB Config editor (not much there)
Disabled current Wemo-Platform Plugin and restarted HB
Uninstalled Wemo-Platform Plugin
Installed homebridge-wemo Plugin and accepted config as presented (json looked just like old)
Restarted HB
Had to move Wemo stuff to correct room assignments and re-setup Automations ... not too bad
Homebridge Bravia Tvos - v5.0.1 to v5.0.8
Homebridge Nest - v4.5.4 to v4.6.4
Homebridge Smartthings - v2.3.8
Fall 2021 Update Notes
Loooong time since last update
DietPi update from 7.0.x to 7.5.2 ... with one little bump in the road ...
Repository 'http://raspbian.raspberrypi.org/raspbian buster InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
To fix, did one of these:
apt-get update --allow-releaseinfo-change
... Then let dietpi-update do it's thing. All else seemed wellHomebridge Update
Homebridge now v1.3.4
Some of the Homebridge Plugins were complaining about needing Node.js v14.17.2 or later ...
From Homebridge "How to Update Node.js" article, did one of these:
hb-service update-nodeHomebridge Plugins
HomebridgeUi - no issues going to v4.41.2
Homebridge-hue - no issues during update, now v0.13.22
Homebridge-platform-wemo - project apparently moved to homebridge-wemo, but will change some other time. No update issues, now v3.3.1
Homebridge Bravia Tvos (not used) - v5.0.1
Homebridge Nest - v4.5.4
Homebridge Smartthings - v2.3.8