This user has no status.
This user has no status.
Open the android app ->did they ditch the stats?
So this means that now everybody can change the drill’s parameters following your GitHub link? Or how to do it? Thanks!!Hi all NovaProS users!
Thank you, @plunder for your comprehensive work on the Pongbot Nova S pro. I enjoyed your posts very much.
Since I was curious I analyzed the bluetooth protocol used by the pongbot app and I think I found some interesting stuff: the communication itself is not encrypted. There is only a slight pseudo-password (time-based) on connection.
The protocol itself is quite simple: a drill consists of a sequence of up to 9 balls, each ball needs
With 10 or more balls the robi returns an error code. The nice thing is: changing the ball height within the drill is possible! Have a look at a small demonstration of a two-ball drill: maximum underspin with ball height -50 followed by maximum topspin with ball height 100. The video url is
- the speed of the upper wheel (app. 500-7200 rpm)
- the speed of the lower wheel
- the ball height
- the drop point
- the frequency
- the number of repetitions
The prototype app to control the bot without the official app runs in Chrome only, tested on desktop and Android: https://smee.github.io/nova-s-custom-drills/index.html
There is no real documentation. If you want to know more details about the protocol, have a look at the script.js in the link above.
The next steps might be adding functions like:
- storing/loading drills under a name (either in browser or dowload?)
- allow longer drills by dynamically sending up to 9 balls at a time to the bot
- more sophisticated random drills (like sketched in the post https://www.tabletennisdaily.com/fo...eview-and-discussion-thread.36322/post-543917)
- showing statistics
- showing description of the current/next ball
- ideas?
wow this is pretty cool! would this work on omni S pro?View attachment 38532
I added some instructions to the web page. You will need to enable bluetooth, mobile data or Wifi is not necessary for the communication with the Nova bot.
Random sequence does not work yet, I need to investigate, probably next week or so.
Saving drills is not yet supported, you will have to copy any changed drill definitions from the text area to a local text file on your phone/computer.
Also, I changed the initial drill definition to something more useful:
I'm not yet sure how to allow configuration of more complex sequences of balls. Something like specifying longer sequences, allow ranges of values (like "change drop point randomly within 3-7"), or maybe name balls to refer to names instead of listing each ball's configuration explicitely?
- short serve with under spin
- long under sping to FH
- increasingly higher, slow top spin balls to FH
- high and slow top spin to the middle of the table to allow the player to smash
Also, storing and loading drills is not yet implemented. I would like to avoid needing any backend server, so probably I will implement some way of sharing drills via link (that includes the drill definition from the text area).
What would you like to see?
Ooo, awesome! Can you tell me how you went about doing this? Some tips on how to get started would hopefully be sufficient, might be able to figure out the rest myself. I'd like to do the same for my Halo robot too!Hi all NovaProS users!
Thank you, @plunder for your comprehensive work on the Pongbot Nova S pro. I enjoyed your posts very much.
Since I was curious I analyzed the bluetooth protocol used by the pongbot app and I think I found some interesting stuff: the communication itself is not encrypted. There is only a slight pseudo-password (time-based) on connection.
The protocol itself is quite simple: a drill consists of a sequence of up to 9 balls, each ball needs
With 10 or more balls the robi returns an error code. The nice thing is: changing the ball height within the drill is possible! Have a look at a small demonstration of a two-ball drill: maximum underspin with ball height -50 followed by maximum topspin with ball height 100. The video url is
- the speed of the upper wheel (app. 500-7200 rpm)
- the speed of the lower wheel
- the ball height
- the drop point
- the frequency
- the number of repetitions
The prototype app to control the bot without the official app runs in Chrome only, tested on desktop and Android: https://smee.github.io/nova-s-custom-drills/index.html
There is no real documentation. If you want to know more details about the protocol, have a look at the script.js in the link above.
The next steps might be adding functions like:
- storing/loading drills under a name (either in browser or dowload?)
- allow longer drills by dynamically sending up to 9 balls at a time to the bot
- more sophisticated random drills (like sketched in the post https://www.tabletennisdaily.com/fo...eview-and-discussion-thread.36322/post-543917)
- showing statistics
- showing description of the current/next ball
- ideas?
There were two main parts to this:Ooo, awesome! Can you tell me how you went about doing this? Some tips on how to get started would hopefully be sufficient, might be able to figure out the rest myself. I'd like to do the same for my Halo robot too!
Regarding the error message:@smee0815 i get "Could not start drill: Uint8Array.fromHex is not a function"-error dialogue in the Chrome-browser of my Android8 phone. With the Chrome-browser of my robi1's Android11 tablet, everything works well, amazing, i'm speechless!
Maybe we should create a systematic table or database which lists the sextuples (6-tuples) of all relevant shots and cerves which the Nova can produce from pos8, and number'n title them, plus a short description. With such a table, the user could quickly pick (copy paste) the 6-tuples which he wants to add to a drill with up to 9 underspin/topspin shots. For example, from pos8, the Nova will be able to produce only a small range of relevant cerves with the topspin/underspin head.
Point being, it takes countless hours to find ball settings which produce good interesting balls, which is due to the 2 wheels limitation of the robot, as summarized in my review.
Anyway, this stuff is really exciting! Huge thanks and congratulation to the feat!! 💪
I think they all have two wheels. I'm interested in trying to create my own app. There are a lot of functions IMO the pongbot app is missing. I also wonder if it's possible to control 2 devices at once, thus allowing you to create a drill with 2 robots at once?There were two main parts to this:
Using those steps and a few hours of cross-eye examination of hex messages patterns emerged, that I then tested using the prototype I open sourced on github.
- reverse engineer the source code of the pongbot app via Blutter (it is a Dart app, so the resulting decompilation will be ARM assembler code with some dart specific comments). I mainly used this to confirm theories I developed using step 2, as well as the initial handshake of the bluetooth connection
- Use the "Bluetooth Snoop" developer functionality in Android to record the acutally transmitted bluetooth messages. I wrote down the timestamp and configuration of drills/actions I used in the pongbot app on paper, then used that as a reference when analyzing the messages in Wireshark.
For other pongbot models, I suppose the handshake should be the same, it was not specific for the Nova S pro. The drill configuration might be different, if other models have more than two wheels?
This depends on whether or not Chrome allows more than one connection at a time. I don't see, why not, worth a try if you have access to more than one bot. From a players perspective, synchronizing the balls from both bots might be an issue: the only mechanism available would by synchronizing the time of sending the drill, but the sequences will be getting out of phase sooner or later.I think they all have two wheels. I'm interested in trying to create my own app. There are a lot of functions IMO the pongbot app is missing. I also wonder if it's possible to control 2 devices at once, thus allowing you to create a drill with 2 robots at once
I just got the Nova as well for short game and service training in addition to my Halo. The synchronization issue can possibly be bypassed by cutting a single drill into multiple shorter drills, thus resetting the sync every few balls.This depends on whether or not Chrome allows more than one connection at a time. I don't see, why not, worth a try if you have access to more than one bot. From a players perspective, synchronizing the balls from both bots might be an issue: the only mechanism available would by synchronizing the time of sending the drill, but the sequences will be getting out of phase sooner or later.
i spent 3d × 5h testing and noting down the full valid wheel speed ranges for underspin balls (height=0,5,10,15,…,100), topspin balls (height=0,5,10,15,…100), underspin cerves (height=-50,-45,-40,-35,-33), and topspin cerves (height=-50,-45,-40,-35,…,0,5,10), all at maximum spin possible, from pos8 to drop point=-6.spend the time programming the random drills i'm looking for.
500,6500,0,-6,0,199 ;75 low laser rocket #unreal, impossible to loop: do nospin loop
500,6800,0,-6,0,199 ;90 rarely lands #unreal
500,5300,5,-6,0,199 ;55 #unreal, open up w/ nospin or off-the-bounce loop
500,6500,5,-6,0,199 ;99 rarely lands #unreal
500,4850,10,-6,0,199 ;50 1bounce, shot sharply, hq push
500,6100,10,-6,0,199 ;99 shot sharply #unreal
500,4450,15,-6,0,199 ;40 1bounce, flickable, medium push #nice
500,5750,15,-6,0,199 ;99 shot sharply almost #unreal, loopable but in match rather nospin loop
500,3950,20,-6,0,199 ;30 1bounce, low lq medium push, near table edge difficult to flick\loop
500,5450,20,-6,0,199 ;99 slowish long push, ok now to loop, challenging
500,3750,25,-6,0,199 ;25 2bounce, low lq short push, difficult to flick #shortpush
500,5150,25,-6,0,199 ;99 #longpush, loopable from afar\near
500,3550,30,-6,0,199 ;25 2bounce, low 0spin #shortpush swattable w/ inv
500,4950,30,-6,0,199 ;99 less low #longpush, starts inviting inv smash
500,3350,35,-6,0,199 ;20 2.5bounce, less low 0spin #shortpush, ez to flick\swat
500,4850,35,-6,0,199 ;99 less low lq #longpush, easier to inv smash
500,3250,40,-6,0,199 ;20 2.8bounce, not low 0spin #shortpush, ez to flick\swat
500,4700,40,-6,0,199 ;99 fair challenge for inv aiming at full swing #nice
500,3150,45,-6,0,199 ;20 3.2bounce, similar to BH=40, triple bounce #shortpush
500,4600,45,-6,0,199 ;99 highish arc lq #longpush, beginners learn inv drive
500,3000,50,-6,0,199 ;15 3.8bounce, flickable, harder to swat
500,4450,50,-6,0,199 ;99 similar to BH=45, ez to loop\swat
500,2900,55,-6,0,199 ;15 4.2bounce, flickable, easier to swat
500,4350,55,-6,0,199 ;99 high arc lq #longpush, getting uncomfy to loop, invites inv smash
500,2850,60,-6,0,199 ;15 5bounce, ez to swat or strawberryslap
500,4300,60,-6,0,199 ;99 similar to BH=55, must inv smash
500,2800,65,-6,0,199 ;15 5bounce, unrealistically ez to swat or strawberryslap
500,4200,65,-6,0,199 ;99 unrealistic high push, too ez to inv smash
500,2750,70,-6,0,199 ;10 5bounce, unrealistic short high 0spin push, too ez
500,4100,70,-6,0,199 ;99 similar to BH=65
500,2650,75,-6,0,199 ;10 6bounce, too ez #unrealistic
500,4100,75,-6,0,199 ;99 similar to BH=65, for inv smash
500,2600,80,-6,0,199 ;10 7bounce, pancake flippable, too ez
500,4000,80,-6,0,199 ;99 similar to BH=65, little underspin
500,2580,85,-6,0,199 ;5 7bounce, difficult to reach
500,3960,85,-6,0,199 ;99 even higher and easier, must inv smash
500,2570,90,-6,0,199 ;5 similar to BH=85, bh flick hits net edge on the rise
500,3940,90,-6,0,199 ;99 bh drive neutralizes underspin, invites natural freestyle bh
500,2560,95,-6,0,199 ;5 8bounce, high short empty push
500,3900,95,-6,0,199 ;99 similar to BH=90, beginner's setting
500,2550,100,-6,0,199 ;5 similar to BH=95, fly down swatting
500,3850,100,-6,0,199 ;99 for bh smash, natural better than inv
7200,500,5,-6,0,199 ;55 low fast, ez to handle, random balls land, min\max the same
7200,4900,5,-6,0,199 ;99 less spinny, low superfast #unreal
6500,500,10,-6,0,199 ;50 low fast, bit unrealistic
7200,500,10,-6,0,199 ;60 low fast, ez to handle
5500,500,15,-6,0,199 ;45 low not slow, ez to handle
7200,1000,15,-6,0,199 ;70 low fastish, ez to handle
5000,500,20,-6,0,199 ;40 very low not too slow, challenging, ~clips the net #nice
7200,500,20,-6,0,199 ;80 short wrist zuckung action, hard topspin but not super spinny
4550,500,25,-6,0,199 ;35 very low slowish, ez to be active
7200,500,25,-6,0,199 ;95 challenging to be active #nice
4200,500,30,-6,0,199 ;30 1bounce, low slow, much time, ez to be active #unrealistic
6800,500,30,-6,0,199 ;99 lowish fast, hardish topspin
3950,500,35,-6,0,199 ;25 1bounce, similar to BH=30, shorter
6500,500,35,-6,0,199 ;99, similar to BH=30, easier
3680,500,40,-6,0,199 ;25 similar to BH=30, less spinny
6050,500,40,-6,0,199 ;99 enough time, perfect for counter <loop/drive/inverse>
3460,500,45,-6,0,199 ;20 1bounce, highish, ez to attack over table
5750,500,45,-6,0,199 ;99 getting highish thus uncomfy
3350,500,50,-6,0,199 ;20 similar to BH=45, swat with inv, close to net single bounce
5400,500,50,-6,0,199 ;99 harmless, to be smashed
3200,500,55,-6,0,199 ;15 1.1bounce, like a table edge cerve
5200,500,55,-6,0,199 ;99 start for pushblock training
3100,500,60,-6,0,199 ;15 2bounce, short highish lq drive, ez to attack
5050,500,60,-6,0,199 ;99 getting highish/unnatural for inv
3000,500,65,-6,0,199 ;15 2bounce, poor quality ball, punishable
4900,500,65,-6,0,199 ;99 easier with natural drive than inv
2900,500,70,-6,0,199 ;10 2bounce, flip smash (not flick smash)
4720,500,70,-6,0,199 ;99 good for press block downwards (fliplike)
2850,500,75,-6,0,199 ;10 similar to BH=70
4600,500,75,-6,0,199 ;99 hold from chest then smash downwards
2800,500,80,-6,0,199 ;10 too ez to flip/inv smash
4500,500,80,-6,0,199 ;99 elbows high, similar to BH=75
2700,500,85,-6,0,199 ;10 similar to BH=80
4450,500,85,-6,0,199 ;99 maybe inv smash safer
2670,500,90,-6,0,199 ;10 similar to BH=80, 2bounce because of topspin
4400,500,90,-6,0,199 ;99 bh smash from afar as you like
2635,500,95,-6,0,199 ;10 similar to BH=80
4350,500,95,-6,0,199 ;95 natural bh drive with schmackes from chest high is fun
2600,500,100,-6,0,199 ;5 2bounce, high, ez to flip o swat
4300,500,100,-6,0,199 ;99 good to learn bh smash from afar
500,3000,-50,-6,0,1 ;25 7bounce, too short to flick
500,4900,-50,-6,0,1 ;99 empty at racket, do a 0spin drive
500,2950,-45,-6,0,1 ;25 6bounce, too low to flick
500,4800,-45,-6,0,1 ;99 do a tennis bh
500,2900,-40,-6,0,1 ;25 similar to BH=-45
500,4600,-40,-6,0,1 ;99 nice harmless lowish long 0spin cerve
500,2900,-35,-6,0,1 ;25 similar to BH=-45, unreliable LW value
500,4000,-35,-6,0,1 ;75 rarely lands, LW=3500 @50nice
500,2800,-30,-6,0,1 ;25 similar to BH=-45
500,3500,-30,-6,0,1 ;50 rarely lands, LW=3100 @40nice
500,2800,-25,-6,0,1 ;20 similar to BH=-45
500,3100,-25,-6,0,1 ;35 rarely lands, LW=2950 @30nice
500,2700,-20,-6,0,1 ;20 similar to BH=-45, impossible to flick
500,2900,-20,-6,0,1 ;30 rarely lands, LW=2800 @25nice
500,2600,-15,-6,0,1 ;15 similar to BH=-45
500,2800,-15,-6,0,1 ;25 rarely lands, LW=2700 @20nice
500,2500,-10,-6,0,1 ;20 similar to BH=-45
500,2750,-10,-6,0,1 ;20 rarely lands, try LW=2600
500,2400,-5,-6,0,1 ;15 similar to BH=-45
500,2650,-5,-6,0,1 ;15 rarely lands, try LW=2500
500,2300,0,-6,0,1 ;15 similar to BH=-45
500,2500,0,-6,0,1 ;15 rarely lands, try LW=2400
2500,500,-50,-6,0,1 ;20 2bounce, clips net coming down from peak
4600,500,-50,-6,0,1 ;99
2500,500,-45,-6,0,1 ;20 2bounce, miniflick possible
4500,500,-45,-6,0,1 ;99, easy, nice, realistic
2500,500,-40,-6,0,1 ;20 similar to BH=-45
4500,500,-40,-6,0,1 ;99 similar to BH=-45
2400,500,-35,-6,0,1 ;20 similar to BH=-45
4250,500,-35,-6,0,1 ;85
2350,500,-30,-6,0,1 ;20 similar to BH=-45
3900,500,-30,-6,0,1 ;70 low, good for practicing hq inv drive
2300,500,-25,-6,0,1 ;20 witzlos, can maneuver to any corner
3600,500,-25,-6,0,1 ;65 easy to inv drive
2300,500,-20,-6,0,1 ;20 similar to BH=-45
3400,500,-20,-6,0,1 ;60 similar to BH=-25
2250,500,-15,-6,0,1 ;20 3bounce, kullerball, miniflickable
3150,500,-15,-6,0,1 ;55 practice inv loop
2200,500,-10,-6,0,1 ;20 similar to BH=-15, bounces 1x
3000,500,-10,-6,0,1 ;50 similar to BH=-15, bounces 3x
2150,500,-5,-6,0,1 ;20 similar to BH=-15
2900,500,-5,-6,0,1 ;45 because of topspin ez to flick ubertisch
2100,500,0,-6,0,1 ;20 similar to BH=-15, close to net single bounce
2800,500,0,-6,0,1 ;45 maneuver with inv press
2050,500,5,-6,0,1 ;15 similar to BH=-15, cerves starting to feel false f***
2700,500,5,-6,0,1 ;45 similar to BH=0
2000,500,10,-6,0,1 ;15 similar to BH=-15, inc BH at min UW can lead to feed jams!
2600,500,10,-6,0,1 ;45 2bounce, short cerve, inc BH leads to high bounce cerves!
500,3000,-50,-6,0,1|500,4700,-40,6,0,1|2500,500,-10,-6,0,1
500,3900,25,6,0,1|500,4700,35,6,0,1
500,3800,45,-6,0,1|500,3500,60,-6,0,1
3750,500,40,-6,0,1|3100,500,65,-6,0,1
5400,500,30,6,0,1|5950,500,40,6,0,1
5650,500,45,-6,0,1|3700,500,70,-6,0,1