[REL] rF2 Telemetry CSV Plugin v4

Discussion in 'Other' started by TechAde, Feb 11, 2014.

  1. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    rF2 Telemetry CSV Plugin 4.0.0.0

    31 October 2014

    * Changed default to enabled on first run, no need to go searching for the ini file in order to get it to do anything.
    * Removed Terrain Name strings from the output so the commas don't mess up the subsequent columns.
    * Corrected a couple of column headings.

    32-bit and 64-bit DLLs included.

    Installation
    -----------

    1. Copy rF2TelemetryCSVPlugin.dll to Bin32\Plugins folder.
    2. Copy rF2TelemetryCSVPlugin_x64.dll to Bin64\Plugins folder.
    3. Run a session. The CSV files will be written to your UserData\Log\Telemetry folder.


    rF2 Telemetry CSV Plugin 3.0.0.0


    28 June 2014

    Rebuilt against v6 of InternalsPlugin.hpp
    SteeringArmForce changed to SteeringShaftTorque
    Adds FrontTireCompoundName, RearTireCompoundName and TurboBoostPressure
    Adds 64-bit DLL for use with 64-bit rFactor2.exe (zip now contains both 32-bit and 64-bit DLLs)

    32-bit Plugin requires rF2 build 660 or later
    64-bit Plugin requires rF2 build 767_x64 or later



    rF2 Telemetry CSV Plugin 2.0.0.0


    11 Feb 2014

    Adds FFB value to the CSV.

    rF2 Telemetry CSV Plugin 1.0.0.0

    7 Feb 2014


    Requires rF2 build 382 or later.


    This rF2 plugin will dump all available telemetry data to a CSV file in UserData\Log\Telemetry. The file is named with the current date & time e.g. 20140207_083233.csv


    Copy rF2TelemetryCSVPlugin.dll to Plugins to install.


    On first run an ini file will be written to UserData\rF2TelemetryCSVPlugin.ini, containing a single entry:


    [Telemetry]
    Enabled=False


    To enable telemetry logging edit this to:


    [Telemetry]
    Enabled=True


    One CSV file will be written for each real-time session (exiting back to the monitor ends a session).


    Logging can be enabled and disabled on the fly using the Toggle Hardware Plugins key (default mapping is G).


    The CSV file generated can be opened in a wide variety of analysis tools including ATLAS. Please see the attached screen grab showing how to configure ATLAS to read CSV files.


    Please post any questions or comments below.

    (I posted the original v1 thread in the wrong forum section, sorry about that!)
     
    Last edited by a moderator: Jan 9, 2015
    Erick3331 likes this.
  2. MaD_King

    MaD_King Registered

    Joined:
    Oct 5, 2010
    Messages:
    1,827
    Likes Received:
    611
    Thank you.
     
  3. cosimo

    cosimo Registered

    Joined:
    Apr 14, 2013
    Messages:
    827
    Likes Received:
    99
    Could you share the source code for this plugin?
     
  4. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    I can't share the full source code sorry as it contains a few bits of proprietary code that I'm not allowed to share (such as the ini file reader & writer classes).

    Other than the proprietary bits there's really not much more to it than what is in the InternalsPlugin sample code provided by ISI at http://rfactor.net/web/rf2/devscorner/, I'm just writing all the available telemetry data out to file rather than just a few selected bits.

    For example, here's the entire UpdateTelemetry() function:


    Code:
    void rF2TelemetryCSVPlugin::UpdateTelemetry( const TelemInfoV01 &info )
    {
        if (logFile != NULL && mEnabled ) {
            fprintf(logFile, "%.3f, %.3f, %i, %s, %s, ", info.mElapsedTime, info.mDeltaTime, info.mCurrentSector, info.mVehicleName, info.mTrackName );
            fprintf(logFile, "%.3f, ", info.mClutchRPM );
            fprintf(logFile, "%i, ", info.mDetached );
            fprintf(logFile, "%.3f, ", info.mDrag );
            fprintf(logFile, "%.3f, ", info.mEngineMaxRPM );
            fprintf(logFile, "%.3f, ", info.mEngineRPM );
            fprintf(logFile, "%.3f, ", info.mEngineTq );
            fprintf(logFile, "%.3f, ", info.mEngineWaterTemp );
            fprintf(logFile, "%.3f, ", info.mFilteredBrake );
            fprintf(logFile, "%.3f, ", info.mFilteredClutch );
            fprintf(logFile, "%.3f, ", info.mFilteredSteering );
            fprintf(logFile, "%.3f, ", info.mFilteredThrottle );
            fprintf(logFile, "%.3f, ", ffb );
            fprintf(logFile, "%.3f, ", info.mFront3rdDeflection );
            fprintf(logFile, "%.3f, ", info.mFrontDownforce );
            fprintf(logFile, "%u, ", info.mFrontFlapActivated );
            fprintf(logFile, "%.3f, ", info.mFrontRideHeight );
            fprintf(logFile, "%u, ", info.mFrontTireCompoundIndex );
            fprintf(logFile, "%.3f, ", info.mFrontWingHeight );
            fprintf(logFile, "%.3f, ", info.mFuel );
            fprintf(logFile, "%.3f, ", info.mFuelCapacity );
            fprintf(logFile, "%i, ", info.mGear );
            fprintf(logFile, "%i, ", info.mHeadlights );
            fprintf(logFile, "%u, ", info.mIgnitionStarter );
            fprintf(logFile, "%i, ", info.mLapNumber );
            fprintf(logFile, "%.3f, ", info.mLapStartET );
            fprintf(logFile, "%.3f, ", info.mLastImpactET );
            fprintf(logFile, "%.3f, ", info.mLastImpactMagnitude );
            fprintf(logFile, "%.3f, ", info.mLastImpactPos.x );
            fprintf(logFile, "%.3f, ", info.mLastImpactPos.y );
            fprintf(logFile, "%.3f, ", info.mLastImpactPos.z );
            fprintf(logFile, "%.3f, ", info.mLocalAccel.x );
            fprintf(logFile, "%.3f, ", info.mLocalAccel.y );
            fprintf(logFile, "%.3f, ", info.mLocalAccel.z );
            fprintf(logFile, "%.3f, ", info.mLocalRot.x );
            fprintf(logFile, "%.3f, ", info.mLocalRot.y );
            fprintf(logFile, "%.3f, ", info.mLocalRot.z );
            fprintf(logFile, "%.3f, ", info.mLocalRotAccel.x );
            fprintf(logFile, "%.3f, ", info.mLocalRotAccel.y );
            fprintf(logFile, "%.3f, ", info.mLocalRotAccel.z );
            fprintf(logFile, "%.3f, ", info.mLocalVel.x );
            fprintf(logFile, "%.3f, ", info.mLocalVel.y );
            fprintf(logFile, "%.3f, ", info.mLocalVel.z );
            fprintf(logFile, "%u, ", info.mMaxGears );
            fprintf(logFile, "%.3f, ", info.mOri[0].x );
            fprintf(logFile, "%.3f, ", info.mOri[0].y );
            fprintf(logFile, "%.3f, ", info.mOri[0].z );
            fprintf(logFile, "%.3f, ", info.mOri[1].x );
            fprintf(logFile, "%.3f, ", info.mOri[1].y );
            fprintf(logFile, "%.3f, ", info.mOri[1].z );
            fprintf(logFile, "%.3f, ", info.mOri[2].x );
            fprintf(logFile, "%.3f, ", info.mOri[2].y );
            fprintf(logFile, "%.3f, ", info.mOri[2].z );
            fprintf(logFile, "%.3f, ", info.mPos.x );
            fprintf(logFile, "%.3f, ", info.mPos.y );
            fprintf(logFile, "%.3f, ", info.mPos.z );
            fprintf(logFile, "%i, ", info.mOverheating );
            fprintf(logFile, "%.3f, ", info.mRear3rdDeflection );
            fprintf(logFile, "%.3f, ", info.mRearDownforce );
            fprintf(logFile, "%u, ", info.mRearFlapActivated );
            fprintf(logFile, "%u, ", info.mRearFlapLegalStatus );
            fprintf(logFile, "%.3f, ", info.mRearRideHeight );
            fprintf(logFile, "%u, ", info.mRearTireCompoundIndex );
            fprintf(logFile, "%u, ", info.mScheduledStops );
            fprintf(logFile, "%u, ", info.mSpeedLimiter );
            fprintf(logFile, "%.3f, ", info.mSteeringArmForce );
            fprintf(logFile, "%.3f, ", info.mUnfilteredBrake );
            fprintf(logFile, "%.3f, ", info.mUnfilteredClutch );
            fprintf(logFile, "%.3f, ", info.mUnfilteredSteering );
            fprintf(logFile, "%.3f, ", info.mUnfilteredThrottle );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mBrakePressure );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mBrakeTemp );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mCamber );
            fprintf(logFile, "%i, ", info.mWheel[0].mDetached );
            fprintf(logFile, "%i, ", info.mWheel[0].mFlat );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mGripFract );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralForce );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLateralPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalForce );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mLongitudinalPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mPressure );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mRideHeight );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mRotation );
            fprintf(logFile, "%u, ", info.mWheel[0].mSurfaceType );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mSuspensionDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mSuspForce );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mTemperature );
            fprintf(logFile, "%s, ", info.mWheel[0].mTerrainName );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mTireLoad );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mToe );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mVerticalTireDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mWear );
            fprintf(logFile, "%.3f, ", info.mWheel[0].mWheelYLocation );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mBrakePressure );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mBrakeTemp );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mCamber );
            fprintf(logFile, "%i, ", info.mWheel[1].mDetached );
            fprintf(logFile, "%i, ", info.mWheel[1].mFlat );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mGripFract );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralForce );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLateralPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalForce );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mLongitudinalPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mPressure );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mRideHeight );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mRotation );
            fprintf(logFile, "%u, ", info.mWheel[1].mSurfaceType );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mSuspensionDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mSuspForce );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mTemperature );
            fprintf(logFile, "%s, ", info.mWheel[1].mTerrainName );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mTireLoad );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mToe );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mVerticalTireDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mWear );
            fprintf(logFile, "%.3f, ", info.mWheel[1].mWheelYLocation );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mBrakePressure );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mBrakeTemp );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mCamber );
            fprintf(logFile, "%i, ", info.mWheel[2].mDetached );
            fprintf(logFile, "%i, ", info.mWheel[2].mFlat );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mGripFract );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralForce );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLateralPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalForce );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mLongitudinalPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mPressure );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mRideHeight );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mRotation );
            fprintf(logFile, "%u, ", info.mWheel[2].mSurfaceType );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mSuspensionDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mSuspForce );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mTemperature );
            fprintf(logFile, "%s, ", info.mWheel[2].mTerrainName );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mTireLoad );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mToe );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mVerticalTireDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mWear );
            fprintf(logFile, "%.3f, ", info.mWheel[2].mWheelYLocation );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mBrakePressure );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mBrakeTemp );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mCamber );
            fprintf(logFile, "%i, ", info.mWheel[3].mDetached );
            fprintf(logFile, "%i, ", info.mWheel[3].mFlat );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mGripFract );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralForce );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLateralPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalForce );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalGroundVel );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mLongitudinalPatchVel );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mPressure );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mRideHeight );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mRotation );
            fprintf(logFile, "%u, ", info.mWheel[3].mSurfaceType );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mSuspensionDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mSuspForce );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mTemperature );
            fprintf(logFile, "%s, ", info.mWheel[3].mTerrainName );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mTireLoad );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mToe );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mVerticalTireDeflection );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mWear );
            fprintf(logFile, "%.3f, ", info.mWheel[3].mWheelYLocation );
    
    
            fprintf(logFile, "\n" );
    
    
        }
    }
    
     
  5. Jamie Shorting

    Jamie Shorting Registered

    Joined:
    Sep 11, 2013
    Messages:
    2,628
    Likes Received:
    3
    Has anybody been able to open the telemetry file with ATLAS? The plugin creates the file but I can't get ATLAS to recognise it.
     
  6. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    Have you configured ATLAS as shown in the screen shot attached to post #1?
     
  7. Jamie Shorting

    Jamie Shorting Registered

    Joined:
    Sep 11, 2013
    Messages:
    2,628
    Likes Received:
    3
    O.K, I'm an idiot, thanks TechAde. :)
     
  8. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    No comment :p
     
  9. Ian Mills

    Ian Mills Registered

    Joined:
    Oct 5, 2010
    Messages:
    7
    Likes Received:
    1
    does anybody have a telemetry file from this plugin that i could have a look at ? I am really interested in this but i am away from my computer atm so i cant create one myself. Just wanted to play with ATLAS and compare it to motec.

    Thanks
    Regards
    Ian
     
  10. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    I can upload one next time I'm at my desk.

    Sent from my GT-I9300 using Tapatalk
     
  11. Ian Mills

    Ian Mills Registered

    Joined:
    Oct 5, 2010
    Messages:
    7
    Likes Received:
    1
    thanks!, that would be great !

    Take Care
    Ian
     
  12. JohnW63

    JohnW63 Registered

    Joined:
    Dec 13, 2011
    Messages:
    187
    Likes Received:
    2
    Do I need anything else for this plugin to work ? I installed it in the folder. It created the INI file, which I edited to have Enable in the line. It doesn't seem to create the Telemetry folder and save anything in it. I manually created a Telemetry folder, but that didn't help. I must have missed something.
     
  13. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    No, you shouldn't need anything else.

    What's the full path to your core & data folders? Where did it create the ini file?
     
  14. JohnW63

    JohnW63 Registered

    Joined:
    Dec 13, 2011
    Messages:
    187
    Likes Received:
    2
    Core Path:
    Local Disk\Program Files (x86)\rFactor2\Core


    Data Path:
    C:\Users\John\My Documents\rFactor2\

    Location of the ini file:
    C:\Users\John\My Documents\rFactor2\UserData

    Shock or FacePalm ....

    Now as I was verifying the ini location, I found the Telemetry folder in the LOG folder within the UserData folder. I would have bet money there were no new folders in there! I think I even did a Windows search for any "Telemetry" files or folders. I don't know what changed. Restart of rFactor ? Computer restart ? Better reading glasses ? In any case, it works FINE now. Sorry for the questions.
     
  15. GauchoRS

    GauchoRS Registered

    Joined:
    Nov 23, 2011
    Messages:
    471
    Likes Received:
    9
    Hi TechAde,

    Very useful plugin, thank you very much!

    I would like to ask you, if you can imagine to work on a ``race engineer plugin`` to provide race informations to the driver, like position, time improvements, tire wear warnings etc. ?
    I have made a GlovePIE script with speech recognition to ``talk`` to an race engineer, but it would be very useful to receive some spontaneous information from your race engineer (rFactor2 program)

    Please have a look to this and think about it with love ?
    http://isiforums.net/f/showthread.p...e-on-track-WIP?p=206760&viewfull=1#post206760
     
  16. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    I don't think I'd have time for something like that sorry, the plugins I've released for rF2 are all rather simple and very little code at all - that sounds like it would be quite a job.
     
  17. GauchoRS

    GauchoRS Registered

    Joined:
    Nov 23, 2011
    Messages:
    471
    Likes Received:
    9
    that`s a pitty .....

    please give it a try ! a very simple one .... Let him say something like ``you tire temperatures are in a good range`` when they passed 85 degrees celcius.
     
  18. cosimo

    cosimo Registered

    Joined:
    Apr 14, 2013
    Messages:
    827
    Likes Received:
    99
    What compiler did you use, TechAde?

    I've been considering to write a race engineer plugin for rF2...
     
  19. TechAde

    TechAde Registered

    Joined:
    Oct 13, 2010
    Messages:
    606
    Likes Received:
    38
    Visual Studio 2008

    Sent from my GT-I9300 using Tapatalk
     
  20. GauchoRS

    GauchoRS Registered

    Joined:
    Nov 23, 2011
    Messages:
    471
    Likes Received:
    9
    that are GREAT news !
    you may refer to the spotter from ``carlomaker`` for rFactor1`` as inspiration

    some ideas for speech output

    - motivation on race start
    - position
    - remaining laps / time
    - you are chasing a car in front and diminuishing gap
    - car approximating from behind
    - tire wear and over/underheating
    - brake overheating
    - reminding (planed) pitstop
    - rain conditions (wet level on track)
    - general track conditions when leaving pits
    - comments whats ongoing during pitstop
    - other cars entering pits during race

    tbc.

    I am ready to support you in anyway
     

Share This Page