Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
259 commits
Select commit Hold shift + click to select a range
a98eaa4
wip doc
8cH9azbsFifZ Nov 29, 2021
5788a76
command
8cH9azbsFifZ Nov 29, 2021
eccca98
cleanup
8cH9azbsFifZ Nov 29, 2021
fc8938b
format
8cH9azbsFifZ Nov 29, 2021
03a83eb
logging
8cH9azbsFifZ Nov 29, 2021
60b6ce5
no logging
8cH9azbsFifZ Nov 29, 2021
7368146
logging services
8cH9azbsFifZ Nov 29, 2021
5c3c9dd
cleanup
8cH9azbsFifZ Nov 29, 2021
6665520
fixme
8cH9azbsFifZ Nov 29, 2021
1714b33
cleanup installation procedure
8cH9azbsFifZ Nov 29, 2021
e4a23b0
simplify
8cH9azbsFifZ Nov 29, 2021
32e8cc8
root
8cH9azbsFifZ Nov 29, 2021
b5001a0
speedup
8cH9azbsFifZ Nov 29, 2021
58f4604
logging
8cH9azbsFifZ Nov 29, 2021
5a5ef77
chmodx
8cH9azbsFifZ Nov 29, 2021
dbf7059
python dev sep
8cH9azbsFifZ Nov 29, 2021
e7442ab
cleanup
8cH9azbsFifZ Nov 29, 2021
42bd3db
cleanup
8cH9azbsFifZ Nov 29, 2021
1af8496
0.30
8cH9azbsFifZ Nov 29, 2021
3159f79
dependency
8cH9azbsFifZ Nov 29, 2021
82a53ff
debugging
8cH9azbsFifZ Nov 29, 2021
150f87b
status checks
8cH9azbsFifZ Nov 29, 2021
9cc16a5
orders
8cH9azbsFifZ Nov 29, 2021
a1125e5
debug startup
8cH9azbsFifZ Nov 29, 2021
51396a4
no startup wait
8cH9azbsFifZ Nov 29, 2021
cbaae99
dbus
8cH9azbsFifZ Nov 29, 2021
e7f976d
uart modem?
8cH9azbsFifZ Nov 29, 2021
8b292ab
cleanup
8cH9azbsFifZ Nov 29, 2021
c165a3c
Merge branch 'master' of github.com:8cH9azbsFifZ/moonboard
8cH9azbsFifZ Dec 20, 2021
30c17fa
test
8cH9azbsFifZ Dec 25, 2021
4aaba18
test
8cH9azbsFifZ Dec 25, 2021
daec3ff
minimize installer
8cH9azbsFifZ Dec 25, 2021
89fda8f
testing interface
8cH9azbsFifZ Dec 25, 2021
07d9208
fix
8cH9azbsFifZ Dec 25, 2021
f592a4f
fix
8cH9azbsFifZ Dec 25, 2021
be6aa4e
fix
8cH9azbsFifZ Dec 25, 2021
da32d4d
single hold
8cH9azbsFifZ Dec 25, 2021
7270700
clear
8cH9azbsFifZ Dec 25, 2021
f300fb9
2 holds
8cH9azbsFifZ Dec 25, 2021
530f7ec
cleanup
8cH9azbsFifZ Dec 25, 2021
26c2141
mqtt connect
8cH9azbsFifZ Dec 25, 2021
3bd9f78
test perc
8cH9azbsFifZ Dec 25, 2021
4a402b1
fix
8cH9azbsFifZ Dec 25, 2021
c9c093d
debug
8cH9azbsFifZ Dec 25, 2021
6f84f32
fix
8cH9azbsFifZ Dec 25, 2021
71f161d
fix
8cH9azbsFifZ Dec 25, 2021
cbe1a45
debug
8cH9azbsFifZ Dec 25, 2021
69a5a71
debug
8cH9azbsFifZ Dec 25, 2021
5d5d271
not working yet - events too fast.
8cH9azbsFifZ Dec 25, 2021
10fea90
test animation
8cH9azbsFifZ Dec 29, 2021
5d0633c
todo
8cH9azbsFifZ Dec 29, 2021
22961c2
wip
8cH9azbsFifZ Dec 29, 2021
ce0b12b
wip flare
8cH9azbsFifZ Dec 29, 2021
74fcd80
activate flare
8cH9azbsFifZ Dec 29, 2021
1e4e869
fix
8cH9azbsFifZ Dec 29, 2021
b95d2b0
fix
8cH9azbsFifZ Dec 29, 2021
8e1151e
fix
8cH9azbsFifZ Dec 29, 2021
9e6ca6c
fix
8cH9azbsFifZ Dec 29, 2021
1b6bac6
fix
8cH9azbsFifZ Dec 29, 2021
f7c5d25
contrain position
8cH9azbsFifZ Dec 29, 2021
13df6bc
fix
8cH9azbsFifZ Dec 29, 2021
18b461e
debugging
8cH9azbsFifZ Dec 29, 2021
3bcad62
color test
8cH9azbsFifZ Dec 29, 2021
f77f84a
debugging
8cH9azbsFifZ Dec 29, 2021
282a4cf
debug
8cH9azbsFifZ Dec 29, 2021
c6986d7
fix
8cH9azbsFifZ Dec 29, 2021
e7283fb
scaling
8cH9azbsFifZ Dec 29, 2021
7aae207
no bright
8cH9azbsFifZ Dec 29, 2021
6d73c6a
debug
8cH9azbsFifZ Dec 29, 2021
0dad47c
scaling
8cH9azbsFifZ Dec 29, 2021
fc75487
scaling
8cH9azbsFifZ Dec 29, 2021
5fbbec3
scaling
8cH9azbsFifZ Dec 29, 2021
75153a6
color
8cH9azbsFifZ Dec 29, 2021
e563f47
float
8cH9azbsFifZ Dec 29, 2021
c9f6c1c
float
8cH9azbsFifZ Dec 29, 2021
c674418
debug
8cH9azbsFifZ Dec 29, 2021
ef876a5
fix
8cH9azbsFifZ Dec 29, 2021
525c127
fix
8cH9azbsFifZ Dec 29, 2021
9f0f492
debug
8cH9azbsFifZ Dec 29, 2021
44f98d2
clear
8cH9azbsFifZ Dec 29, 2021
07b409a
led off
8cH9azbsFifZ Dec 29, 2021
4e1aefb
fluct
8cH9azbsFifZ Dec 29, 2021
6628618
color
8cH9azbsFifZ Dec 29, 2021
e0de2fd
scaling
8cH9azbsFifZ Dec 29, 2021
1c64615
scaling
8cH9azbsFifZ Dec 29, 2021
f80a9b7
debug
8cH9azbsFifZ Dec 29, 2021
453d19d
brightness
8cH9azbsFifZ Dec 29, 2021
a1ab766
scaling
8cH9azbsFifZ Dec 29, 2021
e4ed52a
speed
8cH9azbsFifZ Dec 29, 2021
e654a38
scaling
8cH9azbsFifZ Dec 29, 2021
8a33da4
scaling
8cH9azbsFifZ Dec 29, 2021
f505d4c
scaling
8cH9azbsFifZ Dec 29, 2021
2af991f
scaling
8cH9azbsFifZ Dec 29, 2021
cb72cae
flare
8cH9azbsFifZ Dec 29, 2021
6b260d7
multicol
8cH9azbsFifZ Dec 29, 2021
949b696
fixmes
8cH9azbsFifZ Dec 29, 2021
b282ce6
setup explosion
8cH9azbsFifZ Dec 29, 2021
f565c12
explosion
8cH9azbsFifZ Dec 29, 2021
2a4252e
display
8cH9azbsFifZ Dec 29, 2021
f06649a
coord
8cH9azbsFifZ Dec 29, 2021
1352db5
fix
8cH9azbsFifZ Dec 29, 2021
bf46541
debugging
8cH9azbsFifZ Dec 29, 2021
0ea66d5
debugging
8cH9azbsFifZ Dec 29, 2021
541003c
scaling
8cH9azbsFifZ Dec 29, 2021
5423a15
limits
8cH9azbsFifZ Dec 29, 2021
6b112a8
no limit
8cH9azbsFifZ Dec 29, 2021
ef382a4
scaling
8cH9azbsFifZ Dec 29, 2021
5d064bb
fix
8cH9azbsFifZ Dec 29, 2021
d397193
scaling
8cH9azbsFifZ Dec 29, 2021
d96ace1
testing col
8cH9azbsFifZ Dec 29, 2021
198bf30
debug
8cH9azbsFifZ Dec 29, 2021
0401056
fix
8cH9azbsFifZ Dec 29, 2021
a70b98d
fix
8cH9azbsFifZ Dec 29, 2021
baf3011
config var
8cH9azbsFifZ Dec 29, 2021
2fb2b00
scaling
8cH9azbsFifZ Dec 29, 2021
b309a98
wip
8cH9azbsFifZ Dec 29, 2021
46b6001
animation on
8cH9azbsFifZ Dec 29, 2021
e1d0563
ref
8cH9azbsFifZ Dec 29, 2021
03fec49
scale
8cH9azbsFifZ Dec 29, 2021
fa16167
melon test
8cH9azbsFifZ Dec 29, 2021
c2759ff
fix
8cH9azbsFifZ Dec 29, 2021
c5e96c7
fix
8cH9azbsFifZ Dec 29, 2021
0423917
fix
8cH9azbsFifZ Dec 29, 2021
ced5396
hex
8cH9azbsFifZ Dec 29, 2021
dc60f43
colormap
8cH9azbsFifZ Dec 29, 2021
d04ba52
line2
8cH9azbsFifZ Dec 29, 2021
9784deb
line3
8cH9azbsFifZ Dec 29, 2021
455b6ad
linea4
8cH9azbsFifZ Dec 29, 2021
7eba972
line6
8cH9azbsFifZ Dec 29, 2021
f198378
full
8cH9azbsFifZ Dec 29, 2021
072379e
ref
8cH9azbsFifZ Dec 29, 2021
c8631f9
wip
8cH9azbsFifZ Dec 29, 2021
1e97776
multi
8cH9azbsFifZ Dec 30, 2021
61f27cd
single
8cH9azbsFifZ Dec 30, 2021
9c0deb7
time
8cH9azbsFifZ Dec 30, 2021
2ab5728
color
8cH9azbsFifZ Dec 30, 2021
571848e
colors
8cH9azbsFifZ Dec 30, 2021
8c8af7a
all
8cH9azbsFifZ Dec 30, 2021
b07d193
xmas
8cH9azbsFifZ Dec 30, 2021
d4b0fbb
timing
8cH9azbsFifZ Dec 30, 2021
57f9433
loop
8cH9azbsFifZ Dec 30, 2021
a98f7c8
order
8cH9azbsFifZ Dec 30, 2021
3692c88
no clear
8cH9azbsFifZ Dec 30, 2021
3103a0b
set default to gz config
8cH9azbsFifZ Dec 30, 2021
b0be58f
debugging
8cH9azbsFifZ Dec 30, 2021
bd60afc
pos
8cH9azbsFifZ Dec 30, 2021
3b68594
multiple
8cH9azbsFifZ Dec 30, 2021
6a14ee0
clear
8cH9azbsFifZ Dec 30, 2021
f7392b3
2 digits
8cH9azbsFifZ Dec 30, 2021
3209908
0.31
8cH9azbsFifZ Dec 30, 2021
452edb2
merge
8cH9azbsFifZ Dec 30, 2021
bb26dea
colors
8cH9azbsFifZ Dec 31, 2021
b4eca57
fix
8cH9azbsFifZ Dec 31, 2021
8007d9c
fix
8cH9azbsFifZ Dec 31, 2021
e8b7adf
colors
8cH9azbsFifZ Dec 31, 2021
8f09742
renamed
8cH9azbsFifZ Dec 31, 2021
15f98f0
paw patrol colors
8cH9azbsFifZ Jan 1, 2022
c6c5a27
debug
8cH9azbsFifZ Jan 1, 2022
ff02aee
fix
8cH9azbsFifZ Jan 1, 2022
64bc240
test
8cH9azbsFifZ Jan 1, 2022
7162e02
except less 0
8cH9azbsFifZ Jan 1, 2022
1e2e02b
mqtt proto strip down init
8cH9azbsFifZ Jan 2, 2022
cb4570a
fix
8cH9azbsFifZ Jan 2, 2022
37ad619
fix
8cH9azbsFifZ Jan 2, 2022
1e66170
fix
8cH9azbsFifZ Jan 2, 2022
fb3f822
start adv
8cH9azbsFifZ Jan 2, 2022
f3e2d08
btmon
8cH9azbsFifZ Jan 2, 2022
b092b73
fix
8cH9azbsFifZ Jan 2, 2022
56ccfcc
try decode
8cH9azbsFifZ Jan 2, 2022
9b3cab0
fix
8cH9azbsFifZ Jan 2, 2022
1f14ba0
re-insert outstream
8cH9azbsFifZ Jan 2, 2022
1ac5a6a
unstuffer hack
8cH9azbsFifZ Jan 2, 2022
51cac7d
fix
8cH9azbsFifZ Jan 2, 2022
813ee20
class hack
8cH9azbsFifZ Jan 2, 2022
5424ca0
mqtt stub
8cH9azbsFifZ Jan 2, 2022
c244802
start mqtt
8cH9azbsFifZ Jan 2, 2022
0b340d4
frontend proto
8cH9azbsFifZ Jan 2, 2022
d10685b
fix
8cH9azbsFifZ Jan 2, 2022
fa69841
display hold
8cH9azbsFifZ Jan 2, 2022
7dad35d
checkup
8cH9azbsFifZ Jan 2, 2022
18a0278
fix
8cH9azbsFifZ Jan 2, 2022
4d3771e
display on
8cH9azbsFifZ Jan 2, 2022
27dffe6
fix
8cH9azbsFifZ Jan 2, 2022
0054cb3
all holds
8cH9azbsFifZ Jan 2, 2022
5086837
fix
8cH9azbsFifZ Jan 2, 2022
d9611a5
error reconnect ble traced!
8cH9azbsFifZ Jan 2, 2022
f213177
try fix encoding
8cH9azbsFifZ Jan 2, 2022
0aaaf5a
utf-16 does not work
8cH9azbsFifZ Jan 2, 2022
4fac854
fix try ignore errors
8cH9azbsFifZ Jan 2, 2022
2a199bb
debug
8cH9azbsFifZ Jan 2, 2022
e086138
install new service
8cH9azbsFifZ Jan 2, 2022
5646a60
user pi enough
8cH9azbsFifZ Jan 2, 2022
2b029b3
correct dir
8cH9azbsFifZ Jan 2, 2022
640c9e9
workdir
8cH9azbsFifZ Jan 2, 2022
8447d6b
rename fix
8cH9azbsFifZ Jan 2, 2022
c990093
add service deps
8cH9azbsFifZ Jan 2, 2022
e40c935
doc
8cH9azbsFifZ Jan 2, 2022
f084ebb
led service
8cH9azbsFifZ Jan 2, 2022
8c5fdf2
dir fix
8cH9azbsFifZ Jan 2, 2022
8404bb8
doc
8cH9azbsFifZ Jan 2, 2022
46af3be
cleanup dirs
8cH9azbsFifZ Jan 2, 2022
afe61db
cleanup
8cH9azbsFifZ Jan 2, 2022
d5652c3
installer
8cH9azbsFifZ Jan 2, 2022
6f068da
cleanup
8cH9azbsFifZ Jan 2, 2022
a0de1ac
services
8cH9azbsFifZ Jan 2, 2022
5a06923
services
8cH9azbsFifZ Jan 2, 2022
fde8457
fix dir
8cH9azbsFifZ Jan 2, 2022
35cda83
mqtt version
8cH9azbsFifZ Jan 2, 2022
1eb5926
priv mode
8cH9azbsFifZ Jan 2, 2022
d1f26aa
wip
8cH9azbsFifZ Jan 2, 2022
2c4abad
dbus reinsert
8cH9azbsFifZ Jan 2, 2022
8a57da2
install dbus
8cH9azbsFifZ Jan 2, 2022
69fc6ba
fix name
8cH9azbsFifZ Jan 2, 2022
a564486
doc
8cH9azbsFifZ Jan 2, 2022
5141e89
autorestart
8cH9azbsFifZ Jan 2, 2022
816fbe7
Bump pillow from 8.3.2 to 9.0.1 in /install
dependabot[bot] Mar 12, 2022
1081748
Merge pull request #30 from 8cH9azbsFifZ/dependabot/pip/install/pillo…
8cH9azbsFifZ May 8, 2022
f917a64
Bump numpy from 1.16.3 to 1.21.0 in /install
dependabot[bot] May 8, 2022
b8eb01e
Merge pull request #31 from 8cH9azbsFifZ/dependabot/pip/install/numpy…
8cH9azbsFifZ May 9, 2022
6deafda
Bump numpy from 1.21.0 to 1.22.0 in /install
dependabot[bot] Jun 22, 2022
122f257
Bump pillow from 9.0.1 to 9.3.0 in /install
dependabot[bot] Nov 22, 2022
fd61f1c
Bump certifi from 2019.3.9 to 2022.12.7 in /install
dependabot[bot] Dec 8, 2022
4534474
Merge pull request #34 from 8cH9azbsFifZ/dependabot/pip/install/certi…
8cH9azbsFifZ Dec 31, 2022
427df62
Merge pull request #33 from 8cH9azbsFifZ/dependabot/pip/install/pillo…
8cH9azbsFifZ Dec 31, 2022
bf64bfe
Merge pull request #32 from 8cH9azbsFifZ/dependabot/pip/install/numpy…
8cH9azbsFifZ Dec 31, 2022
21031a4
Bump werkzeug from 0.15.3 to 2.2.3 in /install
dependabot[bot] Feb 15, 2023
86f068e
Bump flask from 1.0.2 to 2.3.2 in /install
dependabot[bot] May 1, 2023
59ace4d
Update moonboard_app_protocol.py for new app
reinarrow Dec 7, 2023
c57b38f
Merge pull request #10 from reinarrow/bug/9-add-support-for-new-app-i…
reinarrow Dec 7, 2023
3884cfe
Hotfix with correct 'or' implementation
reinarrow Dec 12, 2023
707afd0
Merge pull request #37 from 8cH9azbsFifZ/dependabot/pip/install/flask…
8cH9azbsFifZ Mar 9, 2025
79a5447
Merge pull request #36 from 8cH9azbsFifZ/dependabot/pip/install/werkz…
8cH9azbsFifZ Mar 9, 2025
c147d82
Bump werkzeug from 2.2.3 to 3.0.6 in /install
dependabot[bot] Mar 9, 2025
e7e417e
Bump urllib3 from 1.26.5 to 1.26.19 in /install
dependabot[bot] Mar 9, 2025
60d0264
Bump certifi from 2022.12.7 to 2024.7.4 in /install
dependabot[bot] Mar 9, 2025
f658ab7
Bump gitpython from 2.1.11 to 3.1.41 in /install
dependabot[bot] Mar 9, 2025
2b3fb27
Bump requests from 2.21.0 to 2.32.2 in /install
dependabot[bot] Mar 9, 2025
1be90e9
Bump jinja2 from 2.11.3 to 3.1.6 in /install
dependabot[bot] Mar 9, 2025
d6e5926
add removed file
Mar 9, 2025
9b2b36d
Merge branch 'reinarrow-master'
Mar 9, 2025
2260c73
Merge pull request #43 from 8cH9azbsFifZ/dependabot/pip/install/jinja…
8cH9azbsFifZ Mar 9, 2025
7accaa4
Merge pull request #42 from 8cH9azbsFifZ/dependabot/pip/install/reque…
8cH9azbsFifZ Mar 9, 2025
7c0ce59
Merge pull request #40 from 8cH9azbsFifZ/dependabot/pip/install/urlli…
8cH9azbsFifZ Mar 9, 2025
c7ff9f3
Merge pull request #41 from 8cH9azbsFifZ/dependabot/pip/install/gitpy…
8cH9azbsFifZ Mar 9, 2025
484a9d0
Merge pull request #39 from 8cH9azbsFifZ/dependabot/pip/install/certi…
8cH9azbsFifZ Mar 9, 2025
1803f26
Merge pull request #38 from 8cH9azbsFifZ/dependabot/pip/install/werkz…
8cH9azbsFifZ Mar 9, 2025
720632e
flask no specific version
Mar 9, 2025
b605c31
Fix BLE stability: auto-restart btmon and re-advertise on disconnect
claude Feb 8, 2026
a318b32
Add update script and fix broken fix_startup.sh
claude Feb 8, 2026
b8d9e2c
Resolve merge conflict in led_mapping.json (use 3-LED spacing)
claude Feb 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 0 additions & 71 deletions .github/workflows/codeql-analysis.yml

This file was deleted.

6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- v0.32 Removed DBUS backend for LED, new MQTT backend and corresponding services
- v0.31 Animations and prototyped mqtt linkage to hangboard
- v0.30 simplified installation procedure, fix service logging and installtion collisions
- v0.28 merged moonboard mini protocol
- v0.27 merged bt fix test
- v0.23 running in gz setup
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,4 @@ Free standing foldaway version of moonboard. Moonboard with 150mm kicker and tot
## Tested setups
- Raspi W Zero with iPhone 5, 8, X, 11 (iOS >= 14)

# Versions
- v0.28 merged moonboard mini protocol
- v0.27 merged bt fix test
- v0.23 running in gz setup

6 changes: 6 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Minor stuff
- uninstaller for services

# Minor cleanups
- Select python version from "env" for all scripts
- FIXME in files
13 changes: 13 additions & 0 deletions ble/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM debian:latest

RUN apt-get -y update && apt-get upgrade
RUN apt-get -y install git vim python3-pip gcc make build-essential libatlas-base-dev python-dev swig scons

WORKDIR /ble
ADD . /ble/

#https://georgik.rocks/how-to-start-d-bus-in-docker-container/
#dbus-uuidgen > /var/lib/dbus/machine-id
#mkdir -p /var/run/dbus
#dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address
#python3 moonboard_BLE_service.py
22 changes: 22 additions & 0 deletions ble/ERROR-RECONNECT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{"START": ["E4", "H3"], "MOVES": ["E8", "B13", "A16", "A11"], "TOP": ["D18"], "FLAGS": [""]}
start adv
< HCI Command: ogf 0x08, ocf 0x000a, plen 1
01
> HCI Event: 0x0e plen 4
01 0A 20 0C
New data 31352c5031302c45353423
New data dec? 15,P10,E54#


Traceback (most recent call last):
File "moon_ble_mqtt_proto.py", line 165, in <module>
mbble.main(logger,adapter='/org/bluez/hci0') # FIXME: use configured adapter
File "moon_ble_mqtt_proto.py", line 129, in main
self.monitor_btmon(logger,unstuffer)
File "moon_ble_mqtt_proto.py", line 116, in monitor_btmon
self.process_rx(unstuffer,logger,data)
File "moon_ble_mqtt_proto.py", line 93, in process_rx
new_problem_string= unstuffer.process_bytes(ba)
File "/home/pi/moonboard/ble/moonboard_app_protocol.py", line 54, in process_bytes
s = bytearray.fromhex(ba).decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 2: invalid start byte
22 changes: 22 additions & 0 deletions ble/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#api-doc:
# docker run --rm -it -v $(PWD)/ble_api.yaml:/app/asyncapi.yml -v $(PWD)/api:/app/output asyncapi/generator -o /app/output /app/asyncapi.yml @asyncapi/html-template --force-write

install:
service="moonboard_ble.service"
echo "Install moonboard service for: moonboard_ble.service"
sudo cp ./moonboard_ble.service /lib/systemd/system/
sudo chmod 644 /lib/systemd/system/moonboard_ble.service
sudo systemctl daemon-reload
sudo systemctl enable moonboard_ble.service
sudo systemctl restart moonboard_ble.service

install-dbus:
service="com.moonboard.service"
echo "Install moonboard service for: com.moonboard.service"
sudo cp ./com.moonboard.service /lib/systemd/system/
sudo chmod 644 /lib/systemd/system/com.moonboard.service
sudo cp com.moonboard.conf /etc/dbus-1/system.d/com.moonboard.conf
sudo systemctl daemon-reload
sudo systemctl enable com.moonboard.service
sudo systemctl restart com.moonboard.service
sudo systemctl restart dbus
9 changes: 8 additions & 1 deletion ble/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,11 @@ See Bluetooth specification 5.0 (Core_v5.0.pdf), 7.8.5 LE Set Advertising Parame
## Bluez DBUS
[Good introduction](http://smartspacestuff.blogspot.com/2016/02/i-got-figurin-out-dbus-bluez.html)

[API](https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc)
[API](https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc)


# MQTT Interface
## Debugging
+ Status of service `systemctl status moonboard_ble.service`
+ Check for received events `mosquitto_sub -h raspi-moonboard -t "moonboard/ble/problem"`
+ Status of DBUS backend: `sudo systemctl status com.moonboard.service`
Empty file modified ble/com.moonboard.conf
100755 → 100644
Empty file.
11 changes: 7 additions & 4 deletions ble/com.moonboard.service
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
[Unit]
Description=Moonboard DBUS Service
After=multi-user.target
SystemdService=dbus-org.com.moonbooard.service
Description=Moonboard BLE DBUS Service
After=multi-user.target bluetooth.service dbus.service hciuart.service
SystemdService=dbus-org.com.moonbooard.service
# FIXME: SystemdService not known

[Service]
Type=dbus
BusName=com.moonboard
ExecStart=/usr/bin/python3 /home/pi/moonboard/ble/moonboard_BLE_service.py
ExecStart=/usr/bin/python3 /home/pi/moonboard/ble/moonboard_ble_dbus_service.py
User=root
StandardOutput=file:/var/log/moonboard_ble_stdout.log
StandardError=file:/var/log/moonboard_ble_stderr.log

[Install]
WantedBy=multi-user.target
Expand Down
4 changes: 2 additions & 2 deletions ble/moonboard_app_protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def decode_problem_string(s, flags):
t,p = h[0],position_trans(int(h[1:]), num_rows)
if t=='S':
holds['START'].append(p)
if t=='P':
if t=='P' or t == 'R' or t == 'L' or t == 'M' or t =='F':
holds['MOVES'].append(p)
if t=='E':
holds['TOP'].append(p)
Expand Down Expand Up @@ -51,7 +51,7 @@ def process_bytes(self, ba):
handle some error due to multiple connected devices sending simoultaneously.
"""

s = bytearray.fromhex(ba).decode()
s = bytearray.fromhex(ba).decode(errors="ignore")
self.logger.debug("incoming bytes:"+str(s))

if s[0] == '~' and s[-1] == '*':
Expand Down
16 changes: 16 additions & 0 deletions ble/moonboard_ble.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[Unit]
Description=Moonboard BLE Service
After=multi-user.target bluetooth.service hciuart.service mosquitto.service

[Service]
WorkingDirectory=/home/pi/moonboard/ble/
ExecStart=/usr/bin/python3 /home/pi/moonboard/ble/moonboard_ble_service.py
Type=idle
User=root
Restart=on-failure
RestartSec=5s
StandardOutput=file:/var/log/moonboard_ble_stdout.log
StandardError=file:/var/log/moonboard_ble_stderr.log

[Install]
WantedBy=multi-user.target
90 changes: 75 additions & 15 deletions ble/moonboard_BLE_service.py → ble/moonboard_ble_dbus_service.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
from moonboard_app_protocol import UnstuffSequence, decode_problem_string

import os
import errno
import time
import threading
import pty

Expand Down Expand Up @@ -82,24 +84,82 @@ def __init__(self, bus, socket,logger):
dbus.service.Object.__init__(self, bus, self.path)
self.add_service(UartService(bus,self.get_path(), 0, self.process_rx))

monitor_thread = threading.Thread(target=self.monitor_btmon)
monitor_thread = threading.Thread(target=self.monitor_btmon, daemon=True)
monitor_thread.start()

def monitor_btmon(self):
out_r, out_w = pty.openpty()
cmd = ["sudo","btmon"]
process = subprocess.Popen(cmd, stdout=out_w)
f = OutStream(out_r)
def _restart_advertising(self):
"""Re-setup and start BLE advertising after a disconnect."""
self.logger.info('Client disconnected, restarting advertising...')
try:
setup_adv(self.logger)
start_adv(self.logger)
self.logger.info('Advertising restarted successfully')
except Exception as e:
self.logger.error('Failed to restart advertising: ' + str(e))

def monitor_btmon(self):
restart_delay = 2
max_restart_delay = 30

while True:
lines, readable = f.read_lines()
if not readable: break
for line in lines:
if line != '':
line = line.decode()
if 'Data:' in line:
data = line.replace(' ','').replace('\x1b','').replace('[0m','').replace('Data:','')
self.process_rx(data)
self.logger.info('New data '+ data)
out_r, out_w = pty.openpty()
cmd = ["sudo", "btmon"]
try:
process = subprocess.Popen(cmd, stdout=out_w)
self.logger.info('btmon started (pid %d)', process.pid)
except Exception as e:
self.logger.error('Failed to start btmon: ' + str(e))
os.close(out_r)
os.close(out_w)
time.sleep(restart_delay)
restart_delay = min(restart_delay * 2, max_restart_delay)
continue

f = OutStream(out_r)
restart_delay = 2 # reset backoff on successful start

try:
while True:
lines, readable = f.read_lines()
if not readable:
break
for line in lines:
if line != b'':
try:
line = line.decode(errors='ignore')
except Exception:
continue
if 'Disconnect Complete' in line:
self._restart_advertising()
elif 'Data:' in line:
data = line.replace(' ','').replace('\x1b','').replace('[0m','').replace('Data:','')
self.process_rx(data)
self.logger.info('New data '+ data)
except Exception as e:
self.logger.error('btmon monitoring error: ' + str(e))

# Cleanup
try:
process.terminate()
process.wait(timeout=5)
except Exception:
try:
process.kill()
process.wait(timeout=5)
except Exception:
pass
try:
os.close(out_r)
except OSError:
pass
try:
os.close(out_w)
except OSError:
pass

self.logger.warning('btmon exited, restarting in %ds...', restart_delay)
time.sleep(restart_delay)
restart_delay = min(restart_delay * 2, max_restart_delay)

def process_rx(self,ba):
new_problem_string= self.unstuffer.process_bytes(ba)
Expand Down
Loading