Help Needed: GT7 (PS5) Motion Rig + SimHub at the Same Time – How to Split UDP Telemetry?

  • Thread starter Swer86
  • 6 comments
  • 644 views
1
Germany
Germany
Hi everyone,


I’m Johann, writing from Germany. I've built up a motion rig (NJMotion Compact-R, Logitech G-Pro, Buttkicker) and now I’m working on fine-tuning the technical setup between GT7 on PS5, SimTools, and SimHub. I was hoping to get some help here. I've tried a few steps with chatgpt, but I'm just going around in circles and not getting anywhere.

I’m currently trying to get Gran Turismo 7 (PS5) working with both:

  • Motion via SimTools v3 (NJMotion Compact-R motion platform)

  • Dashboards & bass shakers via SimHub v9.8.4
The PS5 sends telemetry via UDP on port 33740. The problem is: only one application can receive the data at a time. Whichever tool is started second fails to receive anything.


My System

  • Game: GT7 on PS5

  • Motion platform: NJMotion Compact-R

  • SimTools v3 with GT7 plugin installed

  • SimHub v9.8.4

  • GT7Proxy (Python version 1.8.0)

  • PC and PS5 are on the same wired LAN

  • Windows 11, Python installed
What works
  • GT7Proxy receives data correctly using:
    python GT7Proxy.py --ps_ip 192.168.178.173

Motion works perfectly via SimTools on port 33740

The GT7 Plugin in SimTools receives XSim data fine


What doesn’t
I want SimHub to receive native GT7 telemetry data on a second port (34000), while SimTools keeps working on 33740.

I tried: python GT7Proxy.py --ps_ip 192.168.178.173 --xsimoutput 33740 --sendport 34000

But SimHub never receives anything.
Also, GT7Proxy shows the following error in the console:
Exception: unpack requires a buffer of 316 bytes

Even though GT7 is running and I’m actively driving.




Already tried:


  • Firewall ports 33740 and 34000 open
  • SimHub listening on UDP 34000 (Live mode active, forwarding disabled)
  • All tools started as admin
  • PS5 reachable by ping
  • I’m in an actual race (not in menu)
  • Tried also --simhub_port and --format gt7 → not supported by my GT7Proxy build
My Question:
Is there a way to make GT7Proxy send both:

  • XSim to SimTools (33740)
  • GT7-native format to SimHub (34000)
    ...at the same time?
  • Or a known working workaround?

Really appreciate any help or config suggestions – this is driving me nuts 😅
Thanks in advance!
 
The workaround I found with help from AI is to Forward the telemetry from the port GT7 Proxy listens to on 33740 to SimHub at another port like 33750.
I build a forwarding exe using Python. I’ll try to paste the ChatGPT instructions here.
 
Last edited:
This process requires some work but I was able to accomplish it despite having no coding background.
I have the D-Box motion system that uses GT7Proxy and I use SimHub for additional haptics via Buttkickers.

Note that I use 33750 as my SimHub port. You can configure yours to any other just make sure it matches in the script you create.

Here’s a step-by-step guide for implementing Solution #1 (using WinDivert) to passively duplicate telemetry packets from GT7Proxy to SimHub.



Step 1: Download and Install WinDivert
1. Download WinDivert:
• Go to the WinDivert official site.
• Download the latest stable version of WinDivert (e.g., WinDivert-2.x.x.zip).
2. Extract the Files:
• Extract the contents of the downloaded .zip file to a folder of your choice (e.g., C:\WinDivert).
3. Verify Installation:
• Ensure you see files like WinDivert32.sys, WinDivert64.sys, and example.exe.



Step 2: Install Python and pydivert
1. Download and Install Python:
• Go to the Python website.
• Download and install the latest version of Python (ensure you check Add Python to PATH during installation).
2. Install the pydivert Library:
• Open a command prompt (press Win + R, type cmd, and hit Enter).
• Run the following command to install pydivert:

pip install pydivert

Step 3: Create the Python Script
1. Open a Text Editor:
• Use a text editor like Notepad or VS Code.
2. Copy the Python Script:
Copy and paste the following code into the editor:

import pydivert

# Set up a WinDivert filter to capture UDP traffic on port 33740
with pydivert.WinDivert("udp.DstPort == 33740") as w:
print("Listening for telemetry...")
for packet in w:
# Forward the original packet to GT7Proxy
w.send(packet)

# Duplicate the packet and send it to SimHub on port 33750
duplicate = packet
duplicate.dst_port = 33750
w.send(duplicate)

3. Save the Script:
• Save the file as telemetry_forwarder.py in a folder of your choice (e.g., C:\WinDivert).



Step 4: Run the Python Script
1. Open Command Prompt:
• Navigate to the folder where you saved telemetry_forwarder.py:
cd C:\WinDivert

2. Run the Script with Administrator Privileges:
• Launch the script:

python telemetry_forwarder.py

• If you see Listening for telemetry..., the script is working.



Step 5: Launch GT7Proxy and SimHub
1. Start GT7Proxy:
• Launch GT7Proxy as usual. It will bind to 33740 and capture telemetry from the PS5.
2. Start SimHub:
• Configure SimHub to listen on port 33750 (this should already be the default).
• Launch SimHub and verify it receives telemetry.



Step 6: Verify Telemetry Flow
1. Telemetry Flow Check:
• Ensure telemetry is flowing:
• PS5 ➡️ GT7Proxy (port 33740).
• Duplicated packets ➡️ SimHub (port 33750).
2. Test in Game:
• Start a race in GT7 on your PS5 and confirm both GT7Proxy and SimHub show live telemetry.



Troubleshooting
1. Python Errors:
• If Python reports missing dependencies, ensure pydivert is installed:

pip install pydivert

2. Telemetry Not Forwarding:
• Ensure the script is running with administrator privileges.
• Verify that GT7Proxy is bound to port 33740 and telemetry is flowing.
3. Port Conflicts:
• Confirm no other application is using port 33740 or 33750.

To make the Python script executable by double-clicking, we can convert it into a standalone .exe file using PyInstaller. Here’s a step-by-step guide:



Step 1: Install PyInstaller
1. Open a command prompt (press Win + R, type cmd, and press Enter).
2. Run the following command to install PyInstaller:

pip install pyinstaller

Step 2: Convert the Python Script to an Executable
1. Navigate to the folder where your telemetry_forwarder.py script is located. For example:

cd C:\WinDivert

2. Run the following command to create a single-file executable:

pyinstaller --onefile telemetry_forwarder.py

3. Once the process completes, you’ll find the executable in the dist folder (e.g., C:\WinDivert\dist\telemetry_forwarder.exe).



Step 3: Test the Executable
1. Navigate to the dist folder.
2. Double-click telemetry_forwarder.exe to run it.
3. A command prompt window will open, and you should see the message:
Listening for telemetry...



Step 4: Clean Up (Optional)
• PyInstaller generates additional folders (build and pycache) and files. You can safely delete these if you don’t need them anymore:
• build
pycache
• telemetry_forwarder.spec



Step 5: Place the Executable for Easy Access
• Move the telemetry_forwarder.exe to a convenient location (e.g., Desktop).
• Now, you can simply double-click it whenever you need to forward telemetry.
 
Last edited:
Here’s my main rig
 

Attachments

  • IMG_9469.jpeg
    IMG_9469.jpeg
    213.5 KB · Views: 1
  • IMG_9466.jpeg
    IMG_9466.jpeg
    111.9 KB · Views: 1
  • IMG_9470.jpeg
    IMG_9470.jpeg
    235.2 KB · Views: 1
  • IMG_9712.jpeg
    IMG_9712.jpeg
    212 KB · Views: 2
Last edited:
From my Chatbox:

The added delay from WinDivert-based packet duplication to SimHub is typically under 1 millisecond (usually < 500 microseconds), assuming your system isn’t under heavy load. It’s effectively negligible for haptics and motion cues.







🔍 More Detailed Breakdown:



💡 What Adds Delay:

1. WinDivert Packet Interception:

• Operates at the network layer (kernel-mode driver).

• Introduces virtually no overhead — usually in the microseconds range.

2. Python Script Overhead:

• Your forwarding script does a simple packet clone and resend.

• Python introduces slightly more overhead than a compiled C app, but still very minimal on modern CPUs.

• Estimated delay: 50–300 microseconds.



🧪 Real-World Test Data (Based on Benchmarks):

• On typical Windows 10/11 systems:

• Packet capture & re-injection via WinDivert: ~200–400 µs.

• Total round-trip (interception → Python → re-send): ~0.5–1.0 ms.



⚠️ What Could Increase Delay:

• High CPU usage (e.g., SimHub rendering + telemetry + GPU overlays).

• Running the script on a non-SSD system or under power-saving CPU modes.

• Large bursts of telemetry packets (unlikely with GT7’s ~20Hz UDP rate).







🧭 Bottom Line:



You’re introducing less than 1ms of latency, which is far below human perception thresholds for motion/haptics (which are typically fine up to 30–50ms). So from a race feel or reaction time standpoint — you’re golden.
 
Last edited:
Back