Bluetooth tethering an Edison

Fri 29 June 2018

There are good instructions on how to tether an Edison to Bluetooth in the docs but I've found them a little difficult to follow, and I'm not certain that it worked "as is" for me, so here's my version.

-2: Comment-out the local WiFi from /etc/wpa_supplicant/wpa_supplicant.conf. The rig prefers WiFi over BT - a decision I very much agree with - but you'll need to ensure that you don't have any WiFi going on for a while until you get this sorted out.

-1: bluetoothd --version If you don't have the correct bluetoothd you're going to be in trouble and will have to reflash the machine. Go and rebuild the rig.

0: Get the MAC of the phone's BT. Mine's 98:0D:2E:D8:59:73.

1: reboot. Best start off fresh.

2: service cron stop. The OpenAPS crontab has lots, and it runs a lot every minute. You don't want them interfeering.

3: ifconfig wlan0 down. To get the rig to connect over Bluetooth, it's best if you don't have a WiFi connection there already. You can confirm that the WiFi is down with ifconfig:

root@erig0:~# ifconfig
lo        Link encap:Local Loopback
          inet addr:  Mask:
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

usb0      Link encap:Ethernet  HWaddr 02:00:86:cf:e9:d8
          inet addr:  Bcast:  Mask:
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

What you don't see here is a wlan0 interface.

4: killall bluetoothd. Stop any existing bluetooth daemons. Repeat every few seconds until you see:

root@edison:~# killall bluetoothd
bluetoothd: no process found

Now there's none running.

5: hciconfig hci0 name $HOSTNAME. Rename your bluetooth to be the name of your rig. My $HOSTNAME is erig0 - and that's what I expect to see in a few places here.

6: /usr/local/bin/bluetoothd & Start the bluetooth daemon. Wait a few seconds.

7: bluetoothctl Launch the bluetooth controller. You're going to stay in here for a bit, and to help make that clear, I'll rename these points 7.1, 7.2 etc etc. When I launched bluetoothctl I saw this:

[NEW] Controller 58:A8:39:01:D5:E0 erig0 [default]
[NEW] Device 98:0D:2E:D8:59:73 Noncompliant
Agent registered

I suspect that this means that the rig already "knows" about my phone's Bluetooth (the 98:0D:2E:D8:59:73 is indeed the phone). I want to be able to ensure that I'm setting up everything cleanly, and have it repair nicely, so I first remove it: remove 98:0D:2E:D8:59:73 which results in:

[bluetooth]# remove 98:0D:2E:D8:59:73
[DEL] Device 98:0D:2E:D8:59:73 Noncompliant
Device has been removed

I then quit and restarted cluetoothctl:

[NEW] Controller 58:A8:39:01:D5:E0 erig0 [default]
Agent registered

This is the state I wanted to find things in.

7.1 discoverable on:

[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller 58:A8:39:01:D5:E0 Discoverable: yes

7.1.1 On your phone you should rescan and see the newly discoverable device named erig0. Don't click on it yet though.

7.2 agent on: Should say Agent is already registered.

7.3 default-agent: Should say Default agent request successful

7.4 Pair from the phone by clicking on the erig0 icon.

7.4.1: When prompted on the rig, check that the numbers are correct and type yes

7.4.2: Afterwards, click "Pair" on the phone.

Afterwards, you'll see a lot of UUID inco and then:

[CHG] Device 98:0D:2E:D8:59:73 Paired: yes
[CHG] Device 98:0D:2E:D8:59:73 ServicesResolved: no
[CHG] Device 98:0D:2E:D8:59:73 Connected: no

7.5 paired-devices: Confirm the phone is paired (from the rig's perspective):

  [bluetooth]# paired-devices
  Device 98:0D:2E:D8:59:73 Noncompliant

7.6 trust 98:0D:2E:D8:59:73: Allow the rig to trust the phone.

[bluetooth]# trust 98:0D:2E:D8:59:73
[CHG] Device 98:0D:2E:D8:59:73 Trusted: yes
Changing 98:0D:2E:D8:59:73 trust succeeded

7.7 quit: Leave the bluetooth controller.

8: bt-pan client 98:0D:2E:D8:59:73: See that the phone has a bluetooth connection now.

9: dhclient bnep0: Get an IP.

root@erig0:~# ifconfig bnep0
bnep0     Link encap:Ethernet  HWaddr 58:a8:39:01:d5:e0
          inet addr:  Bcast:  Mask:
          RX packets:46 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4176 (4.0 KiB)  TX bytes:3386 (3.3 KiB)

Good. Verify with curl

10: reboot. Amongst other things, this will clean up temporary state and will check that all is well with the configurations.

11: Check that all is well. Wait a while. Check your Nightscout. Give it about 10 minutes to sort everything out.

12: Eventually you can revert the commenting-out of the local WiFi from step -2 above.