Overview
Solar Powered temperature and humidity sensing beacon with super capacitor storage for nighttime operation.
Another low effort blog post with mainly notes to myself that others might find useful.
TODO: pics
TODO: screenshot of app
TODO: Crude Linux dumping commands
sudo hcitool lescan --duplicates --passive >/dev/null & sudo hcidump --raw|grep -A2 "50 A0 00" > 04 3E 2A 02 01 03 00 28 20 03 50 A0 00 1E 02 01 04 1A FF 4C 00 02 15 00 05 00 01 00 00 10 00 80 00 00 80 5F 9B 01 31 00 01 6F 68 C3 B9 -- > 04 3E 2A 02 01 03 00 1A 1B 17 50 A0 00 1E 02 01 04 1A FF 4C 00 02 15 00 05 00 01 00 00 10 00 80 00 00 80 5F 9B 01 31 00 02 6C 66 C3 C5
# Temperature Sensor TEMP [℃] = 175.72 x (TEMP x 256) / 65536 – 46.85 Example: TEMP = 0x67 [hex] = 103[dec] TEMP [℃] = 175.72 x (103 x 256) / 65536 – 46.85 = 23.85[℃] # Humidity Sensor RH[%] = 125 x (HUMIDITY x 256) / 65536 – 6 Example: HUMIDITY = 0x74 [hex] = 116[dec] RH[%] = 125 x ( 116 x 256) / 65536 – 6 = 50.64[%]
Sometimes errors when starting lescan
sudo hciconfig hci0 reset
USB Debug Stick
The supplied debug stick for programming the beacons is partially usable with linux with no special drivers. The stick has a mode switch for BLE scanning mode and interfacing with the beacons serial interface / charging it.
$ sudo dmesg [132354.828122] usb 1-1: New USB device found, idVendor=04b4, idProduct=f139 [132354.828133] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=128 [132354.828140] usb 1-1: Product: Cypress KitProg [132354.828147] usb 1-1: Manufacturer: Cypress Semiconductor [132354.828153] usb 1-1: SerialNumber: BLE1304041XXXXXXXXX [132354.837228] hid-generic 0003:04B4:F139.000C: hiddev0,hidraw0: USB HID v1.11 Device [Cypress Semiconductor Cypress KitProg] on usb-0000:00:14.0-1/input0 [132354.838599] cdc_acm 1-1:1.2: ttyACM0: USB ACM device
# With debian or probably ubuntu sudo apt install ckermit cat <cyalkit.kermit set line /dev/ttyACM0 set speed 115200 set handshake none set flow-control none set carrier-watch off set local-echo on set terminal newline-mode on connect quit EOF kermit -y cyalkit.kermit # Press ctrl-\ and then q to quit
TODO: device config
help Get uuid, input:uuid+Enter Set uuid, input:uuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx+Enter Get major, input:major+Enter Set major, input:major xxxx+Enter Get minor, input:minor+Enter Set minor, input:minor xxxx+Enter Get txpwr, input:txpwr+Enter Set txpwr, input:txpwr *+Enter Get rssi, input:rssi+Enter Set rssi, input:rssi *+Enter Get itrvl, input:itrvl+Enter Set itrvl, input:itrvl *+Enter Get coid, input:coid+Enter Set coid, input:coid xxxx+Enter Get nid, input: ednid+Enter Set nid, input: ednid x...x(20 char)+Enter Get bid, input: edbid+Enter Set bid, input: edbid x...x(12 char)+Enter Get edtxpwr, input:edtxpwr+Enter Set edtxpwr, input:edtxpwr * * * *+Enter Get edframe, input:edframe+Enter Set edframe, input:edframe + one or some of uid/url/tlm+Enter Get edstate, input: edstate+Enter Set edlock, input: edlock xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx+Enter Set edunlock, input: edunlock xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx+Enter Get eduri, input:eduri+Enter Set eduri, input:eduri (url or hex string)+Enter Get edadpwr, input:edadpwr+Enter Set edadpwr, input:edadpwr * * * *+Enter Get edtxmode, input:edtxmode+Enter Set edtxmode, input:edtxmode LOWEST/LOW/MEDIUM/HIGH+Enter Geblue 0Command format error!!er Set editrvl, input:editrvl *+Enter edreset, input: edreset+Enter Get sensor, input:sensor+Enter Set sensor, input:sensor on/off+Enter Get mode,input: mode+Enter Set mode,input: mode BLEBeacon/Eddystone/EDTest+Enter Initialize, input: init+Enter Get ver, input: ver+Enter Exit, input: exit+Enter
Unplug USB Stick.
Attach sensor to the stick.
Push switch towards Usb port
TODO: advert dumping with usb stick
Push switch away from usb port
cat the tty
TODO: linux parsing
TODO: iBeacon format
Different advertisment flags might break simpler softer – link to beacontools
Major is beacon id
Minor is temp/humidity – Equations
Shame its not eddystone with sensor values, thought programmable firmwares from cypress community forums might help
Wireshark Bluetooth Dumping
$ sudo hcitool lescan --duplicates --passive >/dev/null & $ xhost +local: $ sudo wireshark $ xhost -
TODO: Wireshare dump example
00:A0:50:XX:XX:XX mac
TODO: Crude Range analysis
Can I change tx power in a useful way?
Does itrvl setting in DM allow a different timer / battery usage ?
I added support to beacontools for this format (https://github.com/citruz/beacontools/pull/8)
sudo apt install libbluetooth-dev sudo pip install beacontools[scan]