Comparing Bluetooth and Zigbee plant monitors

A photo showing a Zigbee plant monitor on the left and a Bluetooth plant monitor on the right

Search for ‘millennials house plants’ on Google and you’ll see lots of magazine articles about how people of our generation love our house plants. Alas, neither Christine or I are particularly good at keeping our house plants alive, apart from those in the already humid environment of our bathroom. So, I’ve been experimenting with electronic plant monitors to see if one will help us keep our plants thriving.

I’ve tried two different sorts of plant monitor: a Bluetooth Low Energy plant monitor from HHCC, and a Zigbee plant monitor from Haozee which works with the Tuya smart home platform. Both were bought from AliExpress.

A photo of the HHCC Bluetooth Smart Flower Monitor, inside a white plant pot and under the leaves of a basil plant.

HHCC Smart Flower Monitor

First to the HHCC model, which uses Bluetooth Low Energy. It’s sometimes known as ‘MiFlora’ and compatible devices are also sold under the Xiaomi brand. Of the two, it’s smaller, and offers more sensors; as well as detecting how much moisture is in the soil and the temperature, it’ll also try to measure how fertile the soil is, and the light intensity. It’s powered by a small CR2032 button battery which is replaceable. Officially, you should use the Flower Care app with it, but it also works with Home Assistant using the Xiaomi BLE integration.

The button battery should work for about six weeks before it needs replacing. Alas, these CR2032 batteries are not rechargeable, so you’ll need to take it to somewhere that recycles batteries and replace them when they run out of charge. At the time of writing, you can get 20 replacement CR2032 batteries for around £6, which should be enough to last you a couple of years.

Bluetooth Low Energy, as the name suggests, doesn’t have a long range. Therefore, if you are using this HHCC device with Home Assistant, you’ll need to have your device (or a Bluetooth proxy) in very close range.

A Zigbee plant monitor, which is white, oblong shaped and has light blue edging, sat in a white plant pot next to a basil plant.

Haozee Zigbee plant monitor

As you’ll see from the side by side photo at the top of this blog post, this Zigbee model is a bit bigger than the Bluetooth model. That’s because it takes two AAA batteries, rather than a CR2032 button battery. Consequently, battery life should be much longer – premium AAA batteries can typically hold up to 1100 mAh charge, compared to around 240 mAh in a CR2032 battery. Also, AAA batteries can be rechargeable.

The Zigbee signal should also be much stronger than Bluetooth Low Energy. I’ve certainly had fewer connection issues with this one compared to the HHCC model, even though the nearest Zigbee device is further away.

However, unlike the HHCC model, it doesn’t offer light or soil fertility sensors. You’ll just get the moisture level and temperature, as well as how much charge the battery has remaining. Also, if you’re planning to connect this to Home Assistant, be aware that it (probably) doesn’t support Home Assistant’s built-in ZHA integration. This was the reason why I set up Zigbee2MQTT.

The other disadvantage of Zigbee devices is the need for a hub or bridge of some sort. I use a Sonoff USB Zigbee dongle plugged into my Raspberry Pi running Home Assistant, but I imagine you’re supposed to use something like this Tuya Zigbee hub (sponsored link) and the Smart Life or Tuya phone apps. So whilst the Zigbee plant monitor itself was slightly cheaper than the Bluetooth model, there’s an initial setup cost if you don’t already have a Zigbee controller.

My recommendation

The HHCC Bluetooth plant monitor is fine if you just want to use the official Flower Care app, or have your plant very close to your Home Assistant device. The replacement batteries are cheap and you may not need any extra hardware to get it to work.

If you need a longer range, don’t want to replace batteries as often, and/or have other Zigbee devices already, get the Zigbee plant monitor. You can use standard rechargeable AAA batteries with it, and you’ll get a more reliable connection over long distances.

Kvidio Bluetooth headphones review

A photo of a pair of Kvidio Bluetooth headphones on a plain background.

Early in July, I needed some new Bluetooth headphones at short notice, and so I bought this cheap pair of Kvidio Bluetooth headphones from Amazon (sponsored link). At the time, they were around £16, but at time of writing they’re selling for £14.20, which is only a little above half their recommend retail price.

Note: this blog post was written before Apple announced that their AirPods Pro would have a hearing aid mode.

Now I’m no audiophile, although I do like headphones that at least make some effort with sound quality. And quality-wise, these sound like headphones in the £30-40 range. Which is pretty good considering their price. They’re nowhere near as good as some much more expensive headphones, but in terms of sound quality, they’re excellent value.

Two devices

One great feature is that they can be paired to two different Bluetooth devices simultaneously. I have my headphones paired to both my iPhone and iPad, and you can switch between the two sources just by starting playback on the other device; your other device will then pause. It supports Bluetooth 5.3, which is currently the second-newest release, and puts it ahead of my iPhone (5.0) and iPad (4.2).

You can, of course, use the headphones for calls, and there’s a microphone included. I haven’t tried recording sound from the microphone but people I’ve called whilst wearing them haven’t commented on any sound issues.

In terms of physical ports, charging is with a USB-C cable, and there’s a 2.5mm audio jack for devices that aren’t paired via Bluetooth. Note that the 2.5mm jack is input only – the microphone only works via Bluetooth. There are three buttons – the centre button pauses playback, and can be held down to turn it on or off. The other two can be used to skip tracks forwards and back.

Another sign of their cheapness is the sounds that the headphones make on startup (a very poorly digitised voice saying ‘power on’ and ‘connected’) and a loud beep when the pause button is pressed. More premium headphones will probably have more pleasing sounds.

Battery life

Battery life is claimed to be 65 hours, and I’ve only needed to charge them once since I bought them nine weeks ago. The long battery life is probably because these are noise-isolating headphones – i.e. they’re a snug fit around your ears to block out noise, but they don’t feature active noise cancellation. That also contributes to the lower price.

They’re quite lightweight – indeed, they don’t feel very solid although I’ve not managed to break them yet. As such, they’re quite comfy to wear, even for long periods.

For what they are, these Kvidio headphones are very good value for money. Sure, there are many better quality options out there, but I think you would struggle to find something else as good as these at this price point.

Creating a Bluetooth proxy with ESPHome

A photo of an m5stack Atom Lite which has been flashed with ESPHome firmware to act as a Bluetooth Proxy for Home Assistant

My latest Home Assistant project has been creating a Bluetooth Proxy – a device that essentially extends the range of my Raspberry Pi’s Bluetooth signal. To do this, I’ve purchased a small device with a ESP32 chip on, and flashed it with firmware from ESPHome.

Okay, so that introduction has a lot of jargon. Allow me to break it down a little.

What is a Bluetooth proxy?

Because Bluetooth connections are point-to-point, you can’t use range extenders like you can with Wifi, Zigbee and Thread networks. That means that any Bluetooth devices that you want to connect to Home Assistant need to be in range of the device that you’re running Home Assistant on. I recently moved my Raspberry Pi to a different location, which meant that it was out of range of one of my Bluetooth thermometers.

A Bluetooth proxy acts as a kind-of bridge between Bluetooth and Wi-Fi. You place the proxy device within range of the Bluetooth devices that you want to connect to Home Assistant, and connect it to your home Wi-Fi network. Once set up, Home Assistant should see your Bluetooth devices as if they were in range.

If you’re running Home Assistant Container, then a Bluetooth proxy may also be easier to set up than a USB Bluetooth dongle. Passing USB devices into a Docker image doesn’t always work well.

It’s worth noting here that Bluetooth proxies are just a Home Assistant ‘thing’. They won’t help you connect a Bluetooth speaker to, say, a smartphone that’s out of range. Also, you can’t buy a device that works as a Bluetooth proxy out of the box. Seriously, if you go onto Amazon and search for ‘Bluetooth proxy’ (sponsored link), all you will get is results for Bluetooth adaptors and development boards with ESP32 chips.

The M5Stack Atom Lite

Whilst there are lots of boards that you can buy, a good option is the M5Stack Atom Lite (also available from AliExpress, where I got mine). This is because it comes with a plastic case, and connects easily using a USB-C cable. You could buy a different board and make your own case for it, but I don’t have a lot of time right now and don’t own a 3D printer. Besides, it costs less than £10 delivered.

The device is tiny – about the size of a 50p piece, and less than a centimetre thick. Because it’s a development board, it also comes with several pins to connect to other devices, but these aren’t necessary if you’re just using it as a Bluetooth proxy. Inside, is the Espressif ESP32 chip.

There are other ESP32-based products in the M5Stack Atom range, that add (for example) a microphone or GPS chip, but again, we don’t need these for a simple Bluetooth proxy.

Installing ESPHome

ESPHome is a sister project to Home Assistant, as they’re both managed by the Open Home Foundation. It’s similar to Tasmota, which I’ve blogged about before, in that they’re both custom firmware packages that you can flash onto ESP devices. Whilst Tasmota and ESPHome can do many of the same things, if you want a Bluetooth proxy then you’ll need to use ESPHome as Tasmota doesn’t support it.

Probably the easiest way to install ESPHome is using one of the ready-made projects. These can be flashed directly from your web browser, as long as you’re using Chrome or Edge (Firefox doesn’t yet support WebSerial so won’t work). You’ll need to connect your Atom Lite to your computer using a USB-C cable that supports both data and charging. You may also need to install the USB drivers – on my Windows 10 machine, the ‘CH9102_VCP_SER_Windows’ download worked. You should then be able to install the firmware, which will take a couple of minutes. Once done, you’ll be prompted for your home Wi-Fi network name and password, and then you should be good to go. Home Assistant will hopefully detect your new Bluetooth proxy automatically.

Managing your Bluetooth proxy in ESPHome

I used ‘hopefully’ in the previous sentence, because this didn’t happen in my case. As I used Home Assistant Supervised, I was able to install the official ESPHome addon; if you use Docker, you can just run docker pull ghcr.io/esphome/esphome to install it. Once installed, the ESPHome addon/docker image should detect your Bluetooth proxy and allow you to ‘adopt’ it.

This will let you view the hostname of your Bluetooth proxy device, which will be something like ‘atom-bluetooth-proxy-wibble.local‘. You can then add the ESPHome integration to Home Assistant, specifying the hostname, and you’ll be good to go. As soon as the integration was working, Home Assistant was able to see a new Bluetooth device and allowed me to configure the integration.

Going forward, you should find that Home Assistant is able to automatically update your ESPHome devices whenever new firmware is available – this is a new feature from the 2024.07 release. But you can also use the ESPHome addon/docker image to add or change features on your device. You could, for example, allow your device to act as an iBeacon as well (I think).

One thing to bear in mind is that Bluetooth and Wi-Fi both use the same 2.4 GHz frequency band. So, if you’re comfortable building your own board with a wired Ethernet connection instead of Wi-Fi, then you may get better performance.

Comparing different smart home protocols

An AI-generated image of various smart devices connecting to a home

When I started acquiring smart devices for my home, my focus was on those that worked over Wifi (or Ethernet) – I wasn’t really aware of the likes of Zigbee, Z-Wave and other protocols that were out there. In particular, I avoided those that required the purchase of a hub or bridge, due to the higher upfront cost.

Now that I’m further along my smart home journey, I’m more open to considering a range of different protocols. They all have their advantages and disadvantages to consider.

Wifi (and Ethernet)

I’m grouping these together as devices that are visible to a standard home network and have their own IPv4 address. The majority of smart home devices use Wifi, as there’s usually no need to buy an additional hub or bridge. Therefore, set-up is usually easy (sometimes aided by Bluetooth), and their range is fine as long as they can pick up your home’s Wifi signal. It’s also very easy to connect these devices to cloud services.

In terms of disadvantages: Wifi primarily uses the 2.4 GHz frequency band, which is used by lots of things and so there’s a potential for interference. The ease of connecting these devices to the cloud can also be seen as a flaw; they’re more susceptible to being compromised by bad actors, and don’t offer as much privacy. Wifi is also quite power-hungry – devices that don’t plug into the mains will need their batteries changing more frequently.

Bluetooth

As mentioned, Bluetooth is often used with Wifi to initially provision devices, but some Bluetooth-only devices can be used in a smart home. For example, there’s my Bluetooth thermometers, which connect to Home Assistant. Compared to Wifi, power requirements are much lower and so Bluetooth is good for battery-powered devices. They’re also more private, as they can’t easily be connected to from the wider internet.

However, Bluetooth has quite a limited range – it’s designed to be a ‘personal’ area network and won’t reach across large houses. You can use a Bluetooth Proxy in Home Assistant to extend the range, and whilst these devices are cheap, you’ll need to be comfortable flashing custom firmware and will usually need to plug them in as they bridge to Wifi. Like Wifi, it uses the 2.4 GHz band and so interference is possible – especially with the lower signal strength. Bluetooth connections also tend to be between two paired devices.

Zigbee

Zigbee is a mesh protocol, and it’s used by a number of smart home brands such as Philips Hue and Ikea Tradfri, as well as UK smart meters. This means that all devices on the same network talk to each other, and so a network with lots of devices could theoretically be quite strong. Like Bluetooth, there’s additional privacy as these devices aren’t connected directly to the internet like with Wifi. It’s also more energy efficient than Wifi, so battery-powered Zigbee devices will last longer between charges.

The key disadvantage of Zigbee is that you need a bridge to link it to your home network. Manufacturers like the aforementioned Philips and Ikea will sell you a hub that does this, although you can also buy USB dongles. Therefore, there’s a higher initial cost as you have to buy a hub as well as your devices. And it’s another 2.4 GHz protocol, so could have the same interference issues as Bluetooth and Wifi.

Whilst Home Assistant has good Zigbee support, both natively and through the Zigbee2MQTT system, if you don’t have a separate hub then getting these devices into Google Home can be a very involved process. Alexa is a little easier thanks to the Emulated Hue integration.

Thread

Thread is based on the same 802.16 standard as Zigbee, but differs in a couple of ways. Firstly, devices on a Thread network have an IPv6 address. Secondly, Thread is a simpler protocol that focuses just on being a mesh network with Matter taking over the device APIs. The benefit of integrating with Matter is that, unlike Zigbee, you may not need a separate bridge for Thread devices. A number of smart speakers from Google, Amazon Alexa and Apple can also act as Thread Border Routers, so it’s possible that you’ll already have the infrastructure in place in your home for Thread devices. Like Zigbee, Thread is a mesh network, and by using Thread Border Routers, the devices have a degree of separation from the wider internet that should improve privacy and security.

The downside is that Thread is still pretty new, and so there aren’t many Thread devices out there yet. You may also find that each device that incorporates a Thread Border Router creates a separate Thread mesh network. Home Assistant can be configured to join a preferred network, but it can be a bit of a faff. Ideally, they should all make one big, strong mesh network across your home, but we’re not there yet. And, once again, we’re dealing with a 2.4 GHz protocol here.

Z-Wave

Z-Wave sets itself apart from the aforementioned protocols by being on the lower 800-900 MHz frequency range. These lower frequencies have a longer range, and so are more suited to larger homes, but also avoid the interference of the 2.4 GHz band. Like Zigbee, it’s a mesh network, and should have similar privacy and security benefits by not being connected directly to the internet.

This also means that Z-Wave has the same disadvantage as Zigbee in that you’ll need a bridge to expose these devices to your home network. Furthermore, Z-Wave devices tend to be more expensive, so the upfront cost is usually higher than other protocols mentioned here.

RF and Infrared

I’m including these for the sake of completeness, but they’re not ‘smart home protocols’ in the same way as the above. It’s possible to connect the likes of Home Assistant to bridge devices that can communicate over Wifi and 433 MHz RF or Infrared. These will typically be doorbells or remote controls for devices that don’t connect using any of the above. But setting them up can be trial and error, and involves detecting and interpreting codes to trigger automations.

If you’re building a smart home system, then a bridge may be useful to bring existing devices in that don’t support standard smart home protocols. But if you’re looking to buy new devices, stick with the ones above.

Phomemo D30 Bluetooth Label Printer review

A photo of a Phomemo D30 Bluetooth Label Printer

We’ve had this little Phomemo D30 Bluetooth label printer (sponsored link) for about 3 1/2 years now, and it’s a fab little gizmo.

It lets you quickly print labels from your phone, with text or emojis, using the Print Master app. It’s quick, as it uses thermal printing in the same way that receipts are printed in shops. The label printer itself is also quite compact – about the same height and width as a smartphone, but about twice the thickness. It comes with a built-in rechargeable battery, and a micro-USB port for charging. There’s a variety of colours to choose from – we have a ‘green’ one that’s more turquoise, but they come in pink, purple, grey and a cheaper all-white model.

The Print Master app is relatively easy to use. You select the size of label to match, type what you want and add any emojis. There are also templates that you can use, and a variety of fonts. When you’re ready to print, you can select the number of copies, and it’ll pop out of your printer in a couple of seconds.

We’ve used our label printer extensively since we bought it. It was especially useful in our new kitchen as it meant that we could label boxes of things in the cupboards. We also use it on a regular basis to label leftovers before they go in the freezer. It’s easier and neater than writing labels by hand.

ThermoPro TP357 Bluetooth thermometer review

A photo of a ThermoPro TP357 thermometer showing the current temperature of 17.5℃ and humidity of 59% on a LCD display.

I have an upcoming project for Home Assistant which means that I need to be able to measure the temperature in our bedroom. As part of this, I’ve bought a couple of ThermoPro TP357 Bluetooth thermometers from Amazon (sponsored link). One is for our bedroom, and the other is for our eight-year-old’s bedroom which tends to get a bit cold in winter.

I specifically went for these thermometers because they’re:

  • Cheap – I paid £19 for the pair last week, but they’re £16 for the pair as I write this.
  • Supported by Home Assistantthere’s an official integration.
  • No extra hardware required – because they’re Bluetooth, and I run Home Assistant on a Raspberry Pi with a supported Bluetooth chip, there’s no additional hardware required to get the two to talk to each other.
  • Probably good battery life – Bluetooth is quite energy efficient when compared with, say, Wifi, and so the batteries should last longer.
  • No need to use the cloud – all the data can be stored locally on Home Assistant.

ThermoPro TP357 look and feel

The ThermoPro units are smaller than I expected. They’re about as tall as a credit card but roughly square, so they’re narrower than a credit card. Each one runs on one AAA battery which is provided. On the back is a flip out kick-stand, a magnet and a hook, so you can wall-mount it, stick it to your fridge or have it free-standing on a shelf like I do. There’s also a button on the back that switches it between Fahrenheit and Celsius.

On the front, there’s an LCD screen which shows the current temperature and humidity level. There’s also a face pictogram – it’ll smile when the humidity is between 30-60%, frown when it’s less than 30% or show a neutral expression if it’s over 60%.

Home Assistant integration

If you have Bluetooth enabled on your Home Assistant device, then a few minutes after you put the battery in, Home Assistant should pop up a notification to say it’s discovered a new ThermoPro device. You’ll just need to confirm that you want to set it up and allocate it to an area, and you’re done.

As you would expect, the ThemoPro integration reveals entities for temperature and humidity, but also the battery level. I’m not sure how accurate this is, as both provided AAA batteries just show 50%. I’ve added these to my Home Assistant dashboard, and have set up some additional functionality that I’ll blog about later. Mainly because, despite allegedly being ‘summer’ in the UK right now, it’s not been warm enough for me to test.

The range seems quite good on these. ThermoPro claim that there’s an 80 metre range in direct line of sight. There’s a few thick walls between my Home Assistant device and the thermostats, and one that is around 5 metres away doesn’t have great signal strength but it’s enough.

ThermoPro app

Of course, ThermoPro expect you to use their app for iOS and Android. This includes logging of up to a year’s data, and you can set notifications based on events related to the humidity and temperature. Well, that’s what it says – I haven’t actually installed the app. I’m not yet sure if it’s possible to have the app and Home Assistant communicate with the thermostat at the same time. But theoretically, anything the app can do, Home Assistant can do too.

Alternatives

I’ve had various Facebook adverts for alternatives to these. Some have e-ink displays, which are more readable at a distance, or use different protocols to Bluetooth. But they’re all more expensive. These two seem to do the job well and are small and cheap. Plus, it should be quite a while until I need to replace the batteries.

One mouse to rule them all

A photo of the Arteck multi device Bluetooth wireless mouse

Back in September 2002, I bought this multi-device Bluetooth mouse from Amazon (sponsored link). As a multi-device mouse, it can be used to control three separate devices.

I bought it so that I could use it both with my desktop, and my iPad – because yes, you can use a mouse with an iPad. It supports two Bluetooth devices, and can connect to a third using an RF USB dongle. I use the dongle with my desktop, as RF uses less power. Switching devices is as simple as pressing a button on the side.

As a mouse, it works quite well – clicking is quiet, and I’ve been using it for almost 18 months with no complaints. It’s a comfortable size too – not as big as some mice, but larger than some laptop mice. However, this model is designed for people who are right handed; I had a look for left-handed multi-device mice on Amazon but couldn’t find any.

The battery life is also really good – I recharge it about every three months. It has a built-in battery which charges using a USB-C cable, and this plugs in at the top so that you can still use it whilst charging. This makes it better than Apple’s Magic Mouse, which has its Lightning connector on the bottom and so can’t be used while charging. The USB-C port is just for charging though; it won’t turn your mouse into a wired mouse. There is also a small slide-out compartment to store the USB RF dongle if you’re not using it.

As well as the device switch button on the left side, there are two additional buttons which, by default, act as back and forward buttons in a web browser.

Whilst I’m sure there are other multi-device mice out there, this suits my needs and has worked well for me. It’s reasonably priced at around £19, at time of writing.

mPow Magneto wireless Bluetooth headset review

A photo of a mPow Magneto wireless Bluetooth headset

When my latest set of headphones stopped working in one ear, thanks to a loose connection in the jack, I decided that it was probably about time to get rid of the wires altogether and go wireless. I’d previously tried some cheap no-brand Bluetooth headphones in 2014, which were terrible – a non-standard charger cable, poor sound quality and cheap plastic-y construction. I think I used them once – I’d bought them for the gym but then stopped going and haven’t been back since.

After browsing through Amazon, I came across these mPow Magneto headphones. The reviews were generally good and they ranked as the number best-seller in wireless headphones. I purchased them for £16, but at the time of writing they’re selling for less, making them a bargain.

The headphones aren’t completely wireless – there’s a flat wire between the two earpieces which also has a remote control on the right side. But they’re less prone to tangling than regular wired headphones and you can run the wire behind your neck. The ‘Magneto’ name refers to the magnets in the earpieces – you can attach them together and wear it as a sort of necklace when you’re not listening to them.

The remote control has volume control buttons, and a general purpose button used for turning them on and off, and for pause the current playing track. There’s also a microphone, and when paired with a phone you can use it to make and receive telephone calls. The right earpiece has a micro-USB port for charging – a full charge takes about an hour and gives around 8-10 hours of music playing in my experience.

Pairing with your device is straightforward, and if your device supports the Bluetooth Battery Service, you’ll be able to see how much charge your headphones have left. My iPhone 5S supports this; when connected, the Bluetooth icon in the top right gains an additional battery indicator and a new ‘Battery’ widget appears on the Today pull-down. The mPow Magneto will also play an audible warning every 5 minutes once you get below 30% battery remaining.

Sound quality is pretty good – decent bass and reasonable clarity. Audiophiles will probably want to spend more on something better, but I was pleasantly surprised – I’ve used wired headphones with worse sound quality before. Although sometimes radio interference affects the range – the sound can become choppy if your device is more than a foot away from your headphones, but it depends where you are. Other times it can be a couple of metres away and be fine.

Going wireless does have its downsides. As far as I can tell, you can only pair your headphones with one device at a time, whereas you can plug wired headphones into any device with a 3.5mm audio jack. Although you can use the headphones whilst they’re charging, you may have physical difficulty getting the right earbud to sit in your ear as you do so. Plus, the need to recharge your headphones once or twice a week may put some people off, as will the extra battery drain on your phone or device (especially if you normally have Bluetooth turned off). But not having to unknot wires that then dangle and pull when running is quite liberating.

There are better headsets out there, if you’re prepared to pay more. But the mPow Magneto is fantastic value for money and gets my recommendation. I use them daily and have been really impressed with them.

New post on Medium: Bluetooth on iOS

I’ve written another post on Medium. It’s just a short two-minute read, but covers an issue I’ve been experiencing in iOS as I’ve amassed more Bluetooth devices: how on earth do you work out which one is which when they’re all called things like ‘SE50’ and ‘MM256’?

I’ve chosen to post it on Medium in the hope that it might get exposed to a slightly larger audience than usual. I think my previous piece on Medium got a little more exposure than it would have done normally – it didn’t exactly ‘go viral’ but I get the impression that more people saw it than if I had just posted it here on my blog.

If you enjoy my Medium pieces, then please ‘recommend’ them.

Things I have done to fix the ‘Bluetooth: Not Available’ error on Mac OS X

These are all the things that I have tried to fix the ‘Bluetooth: Not Available’ error on my MacBook:

  1. Reset the System Management Controller (SMC)
  2. Reset the PRAM and NVRAM
  3. Repaired disk permissions
  4. Deleted Bluetooth preference files from my Home and System Library folders

And none of them have worked. Looks like my MacBook’s Bluetooth controller is dead. Great.

Update: It’s working again. Apparently all I needed to do was turn the computer off (at the plug), leave it overnight and turn it on again the following morning. How bizarre.