Files
Guido.Tech/scripts/__pycache__/simulate_pi_stream.cpython-312.pyc

87 lines
9.4 KiB
Plaintext
Raw Normal View History

2025-10-19 02:00:56 -05:00
<EFBFBD>
<0B><>hZ<00> <00><><00>dZddlZddlZddlZddlmZddlmZmZddl Z
ddl Z dede
jfd<07>Z de
jdeeeffd <09>Z dd
e
jd ed ed edef
d<0F>Zd<10>Zedk(re<14>yy)at
Raspberry Pi Telemetry Stream Simulator
Reads the ALONSO_2023_MONZA_RACE CSV file row by row and simulates
live telemetry streaming from a Raspberry Pi sensor.
Sends data to the HPC simulation layer via HTTP POST at intervals
determined by the time differences between consecutive rows.
Usage:
python simulate_pi_stream.py --data ALONSO_2023_MONZA_RACE --speed 1.0
<EFBFBD>N)<01>Path)<02>Dict<63>Any<6E>filepath<74>returnc<00>h<00>tj|d<01><02>}|djdk(rtj|d<00>|d<t dt |<01><00>d|<00><00><04>t d|dj <00>d <09>d
|dj<00>d <09><04><04>t d |djd <00><00><02>|S) z"Load telemetry data from CSV file.r)<01> index_col<6F> overall_time<6D>objectu ✓ Loaded z telemetry points from <20> Laps: <20>
lap_numberz.0f<EFBFBD><20> Duration: <20><><EFBFBD><EFBFBD><EFBFBD>) <09>pd<70>read_csv<73>dtype<70> to_timedelta<74>print<6E>len<65>min<69>max<61>iloc)r<00>dfs <20>scripts/simulate_pi_stream.py<70>load_telemetry_csvrs<><00><00> <0B><1B><1B>X<EFBFBD><11> +<2B>B<EFBFBD>
<EFBFBD>.<2E><19><1F><1F>8<EFBFBD>+<2B><1F>_<EFBFBD>_<EFBFBD>R<EFBFBD><0E>-?<3F>@<40><02>><3E><1A> <09>K<EFBFBD><03>B<EFBFBD><07>y<EFBFBD> 7<><08>z<EFBFBD>
B<EFBFBD>C<> <09>I<EFBFBD>b<EFBFBD><1C>&<26>*<2A>*<2A>,<2C>S<EFBFBD>1<><15>r<EFBFBD>,<2C>7G<37>7K<37>7K<37>7M<37>c<EFBFBD>6R<36>
S<EFBFBD>T<> <09>M<EFBFBD>"<22>^<5E>,<2C>1<>1<>"<22>5<>6<>
7<EFBFBD>8<> <0A>I<EFBFBD><00>rowc<00>$<00>tj|d<00>rt|d<00>ndtj|d<00>rt|d<00>ndtj|d<00>rt|d<00>ndtj|d<00>rt|d<00>ndt |d<00>tj|d<00>rt |d<00>nd tj|d
<00>rt|d
<00>ndtj|d <00>rt|d <00>ndt |d <00>d ddtj|d<00>rEtj|d<00>r-t ddt|d<00>t|d<00>z dzz
<00>ndd<14> }|S)z8Convert a DataFrame row to a JSON-compatible dictionary.r N<>
total_laps<EFBFBD>speedg<00>throttle<6C>brake<6B> tire_compound<6E>UNKNOWN<57>tire_life_laps<70>track_temperature<72>rainfall<6C>Monza<7A>Alonso<73>g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><00>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g<00>?) r r r!r"r#r$r&r'r(<00>
track_name<EFBFBD> driver_name<6D>current_position<6F>
fuel_level)r<00>notna<6E>int<6E>float<61>bool<6F>strr)r<00>datas r<00> row_to_jsonr7%s<><00><00>13<31><08><08><13>\<5C>9J<39>0K<30>c<EFBFBD>#<23>l<EFBFBD>+<2B>,<2C>QU<51>02<30><08><08><13>\<5C>9J<39>0K<30>c<EFBFBD>#<23>l<EFBFBD>+<2B>,<2C>QU<51>(*<2A><08><08><13>W<EFBFBD><1C>(><3E><15>s<EFBFBD>7<EFBFBD>|<7C>$<24>C<EFBFBD>.0<EFBFBD>h<EFBFBD>h<EFBFBD>s<EFBFBD>:<3A><EFBFBD>.G<>E<EFBFBD>#<23>j<EFBFBD>/<2F>*<2A>S<EFBFBD><15>c<EFBFBD>'<27>l<EFBFBD>#<23>68<36>h<EFBFBD>h<EFBFBD>s<EFBFBD>?<3F>?S<>6T<36><13>S<EFBFBD><1F>1<>2<>Zc<5A>:<<3C>(<28>(<28>3<EFBFBD>GW<47>CX<43>:Y<>%<25><03>$4<> 5<>6<>_b<5F>@B<><08><08><13>M`<60>Ia<49>@b<>U<EFBFBD>3<EFBFBD>':<3A>#;<3B><<3C>hk<68><18><13>Z<EFBFBD><1F>)<29><1E><1F><1D>eg<65>em<65>em<65>nq<6E>r~<7E>n<6E>fA<02>FH<02>FN<02>FN<02>OR<02>S_<02>O`<02>Fa<02>c<EFBFBD>#<23>s<EFBFBD>e<EFBFBD>C<EFBFBD> <0C>,=<3D>&><3E><15>s<EFBFBD><<3C>GX<47>AY<41>&Y<>\_<>&_<>`<60>a<>gj<02> <06>D<EFBFBD>" <10>Krr<00>endpointr!<00> start_lap<61>end_lapc
<00>H<00>||d|k\j<00>}|r||d|kj<00>}t|<05>dk(r td<03>y|jd<05><06>}td<07>td|<01><00><02>td |<03>d
|xsd <0B><00><04>td |<02>d <0A><03>tdt|<05><00><00><02>|djd|djdz
j <00>}td|d<12>d||z d<12>d<14><05>d}d}|} t t|<05><00>D<00>]^}
|j|
} |
t|<05>dz
kr8|j|
dz} | d| dz
j <00>} | |z }|dkrd}nd}t| <0B>} tj||d<16><17>}|jdk(r<>|dz }| d| kDr9| d} |
dzt|<05>z dz}tdt| <09><00>d|<07>d|d<12>d<1D><07>nl|dzdk(rd|
dzt|<05>z dz}tdt| d<00><00>d|<07>d|d<12>d<1D><07>n-|dz }td|j<00>d|jdd <00><00><04>|dkDs<02><01>Jtj |<0E><00><01>atd$<24>td%|<07>d&<26><03>td'|<08><00><02>y#tj$r4}|dz }|d!zdk(rtd"|<08>d#t|<12>dd <00><00><04>Yd}~<12><>d}~wwxYw#t"$r)td(<28>td%|<07>d)t|<05><00>d&<26><05>YywxYw)*a^
Simulate live telemetry streaming based on actual time intervals in the data.
Args:
df: DataFrame with telemetry data
endpoint: HPC API endpoint URL
speed: Playback speed multiplier (1.0 = real-time, 2.0 = 2x speed)
start_lap: Starting lap number
end_lap: Ending lap number (None = all laps)
r ru.❌ No telemetry points in specified lap rangeNT)<01>dropu*
🏁 Starting telemetry stream simulationz Endpoint: r r<00>endz
Speed: <20>xz Points: r
rrz.1fus (real-time) → z s (playback)
<EFBFBD>g@)<02>json<6F>timeout<75><74><00>du 📡 Lap z: z points sent (z % complete)i<>u ⚠ HTTP <20>2<00>
u ⚠ Connection error (z total): u
✅ Stream complete!z Sent: z pointsz Errors: u
⏸ Stream interrupted by user<65>/)<12>copyrr<00> reset_indexr<00> total_seconds<64>ranger7<00>requests<74>post<73> status_coder2<00>text<78>RequestExceptionr5<00>time<6D>sleep<65>KeyboardInterrupt)rr8r!r9r:<00> filtered_df<64>total_duration<6F>
sent_count<EFBFBD> error_count<6E> current_lap<61>ir<00>next_row<6F> time_diff<66>
sleep_time<EFBFBD>telemetry_point<6E>response<73>progress<73>es r<00>simulate_streamr`;s<><00><00>$<15>R<EFBFBD> <0C>%<25><19>2<>3<>8<>8<>:<3A>K<EFBFBD><0E>!<21>+<2B>l<EFBFBD>";<3B>w<EFBFBD>"F<>G<>L<>L<>N<> <0B>
<EFBFBD>;<3B><17>1<EFBFBD><1C> <0A>><3E>?<3F><0E><1E>)<29>)<29>t<EFBFBD>)<29>4<>K<EFBFBD> <09> 7<>9<> <09>M<EFBFBD>(<28><1A>
$<24>%<25> <09>I<EFBFBD>i<EFBFBD>[<5B><05>g<EFBFBD>&6<><15>%7<>
8<EFBFBD>9<> <09>J<EFBFBD>u<EFBFBD>g<EFBFBD>Q<EFBFBD>
<1F> <20> <09>K<EFBFBD><03>K<EFBFBD>(<28>)<29>
*<2A>+<2B>!<21>.<2E>1<>6<>6<>r<EFBFBD>:<3A>[<5B><1E>=X<>=]<5D>=]<5D>^_<>=`<60>`<60>o<>o<>q<>N<EFBFBD> <09>M<EFBFBD>.<2E><13>-<2D>-?<3F><0E>QV<51>@V<>WZ<57>?[<5B>[i<>
j<EFBFBD>k<><12>J<EFBFBD><13>K<EFBFBD><1B>K<EFBFBD>;B<01><16>s<EFBFBD>;<3B>'<27>(<28>2 '<27>A<EFBFBD><1D>"<22>"<22>1<EFBFBD>%<25>C<EFBFBD><11>3<EFBFBD>{<7B>#<23>a<EFBFBD>'<27>'<27>&<26>+<2B>+<2B>A<EFBFBD><01>E<EFBFBD>2<><08>%<25>n<EFBFBD>5<><03>N<EFBFBD>8K<38>K<>Z<>Z<>\<5C> <09>&<26><15>.<2E>
<EFBFBD><1E><01>><3E>!"<22>J<EFBFBD><1E>
<EFBFBD>*<2A>#<23>.<2E>O<EFBFBD> Z<01>#<23>=<3D>=<3D><1C>(<28><1F><12><08> <1C>'<27>'<27>3<EFBFBD>.<2E><1E>!<21>O<EFBFBD>J<EFBFBD><1B><<3C>(<28>;<3B>6<>&)<29>,<2C>&7<> <0B>$%<25><01>E<EFBFBD>S<EFBFBD><1B>-=<3D>#=<3D><03>#C<><08><1D> <0B>C<EFBFBD> <0B>,<<3C>+=<3D>R<EFBFBD>
<EFBFBD>|<7C>L"<22>"*<2A>3<EFBFBD><1E>{<7B><<3C>=<3D>#<23>c<EFBFBD>)<29>Q<EFBFBD>.<2E>$%<25><01>E<EFBFBD>S<EFBFBD><1B>-=<3D>#=<3D><03>#C<><08><1D> <0B>C<EFBFBD><03>L<EFBFBD>0A<30>,B<>+C<>2<EFBFBD>j<EFBFBD>\<5C>R"<22>"*<2A>3<EFBFBD><1E>{<7B><<3C>=<3D> <20>1<EFBFBD>$<24>K<EFBFBD><19>K<EFBFBD><08>(<<3C>(<<3C>'=<3D>R<EFBFBD><08> <0A> <0A>c<EFBFBD>r<EFBFBD>@R<>?S<>T<>U<><1A>A<EFBFBD>~<7E><14>
<EFBFBD>
<EFBFBD>:<3A>&<26>e2 '<27>h <0E>&<26>(<28> <0A> <09>*<2A><1C>W<EFBFBD>-<2D>.<2E> <0A> <0B>K<EFBFBD>=<3D>)<29>*<2A><><1C>,<2C>,<2C> Z<01><1B>q<EFBFBD> <20> <0B><1E><12>#<23>q<EFBFBD>(<28><19>4<>[<5B>M<EFBFBD><19>3<EFBFBD>q<EFBFBD>6<EFBFBD>RU<52>SU<53>;<3B>-<2D>X<>Y<><59><EFBFBD> Z<01><> <1D>B<01> <0A>0<>2<> <0A> <09>*<2A><1C>Q<EFBFBD>s<EFBFBD>;<3B>'7<>&8<><07>@<40>A<>B<01>sE<00>A=K/<00>CJ%<02>K/<00>$AK/<00>%K,<05>8*K'<05>"K/<00>'K,<05>,K/<00>//L!<03> L!c<00>H<00>tjd<01><02>}|jdtdd<05><06>|jdtdd <09><06>|jd
td d <0C><06>|jd t
dd<0F><06>|jdt
dd<11><06>|j <00>} t|j<00>}|j<00>s2tt<00>jj}||jz }t|<02>}t||j|j|j |j"<00>y#t$$r>t'd|j<00><00><02>t'd<02><00><02>t)j*d<0E>Yyt,$r}t'd|<05><00><02><00>d}~wwxYw)Nz7Simulate Raspberry Pi telemetry streaming from CSV data)<01> descriptionz--data<74>ALONSO_2023_MONZA_RACEzPath to telemetry CSV file)<03>type<70>default<6C>helpz
--endpointzhttp://localhost:8000/telemetryzHPC API endpointz--speedr,z2Playback speed (1.0 = real-time, 10.0 = 10x speed)z --start-lapr?zStarting lap numberz --end-lapzEnding lap numberu❌ File not found: z
Tried: u ❌ Error: )<17>argparse<73>ArgumentParser<65> add_argumentr5r3r2<00>
parse_argsrr6<00> is_absolute<74>__file__<5F>parentrr`r8r!r9r:<00>FileNotFoundErrorr<00>sys<79>exit<69> Exception)<06>parser<65>args<67> data_path<74>
script_dirrr_s r<00>mainrv<00>sx<00><00> <15> $<24> $<24>M<><06>F<EFBFBD> <0B><17><17><08>s<EFBFBD>4L<34>9<><18>;<3B>
<EFBFBD><17><17> <0C>3<EFBFBD>8Y<38>/<2F><18>1<>
<EFBFBD><17><17> <09><05>s<EFBFBD>Q<><18>S<01>
<EFBFBD><17><17> <0A>C<EFBFBD><11>AV<41><17>W<>
<EFBFBD><17><17> <0B>#<23>t<EFBFBD>BU<42><17>V<> <11> <1C> <1C> <1E>D<EFBFBD><0E><18><14><19><19>O<EFBFBD> <09><18>$<24>$<24>&<26><1D>h<EFBFBD><1E>.<2E>.<2E>5<>5<>J<EFBFBD>"<22>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>.<2E>I<EFBFBD> <1F> <09> *<2A><02><17> <0E> <10>M<EFBFBD>M<EFBFBD> <10>J<EFBFBD>J<EFBFBD> <10>N<EFBFBD>N<EFBFBD> <10>L<EFBFBD>L<EFBFBD> 
<EFBFBD><EFBFBD> <1D><14> <0A>$<24>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>K<EFBFBD>0<>1<> <0A>
<EFBFBD>9<EFBFBD>+<2B>&<26>'<27> <0B><08><08><11> <0B> <14><0E> <0A> <0B>A<EFBFBD>3<EFBFBD><1F> <20> <0A><><0E>s <00>%BD?<00>?AF!<03>F!<03> F<03>F!<03>__main__)r,r?N)<16>__doc__rgrPro<00>pathlibr<00>typingrr<00>pandasrrK<00> DataFramer<00>Seriesr5r7r3r2r`rv<00>__name__<5F>rr<00><module>r<>s<><00><01>
<04><10> <0B>
<EFBFBD><18><1C><13><0F> <0E><14> <0E>"<22>,<2C>,<2C> <0E><10>R<EFBFBD>Y<EFBFBD>Y<EFBFBD><10>4<EFBFBD><03>S<EFBFBD><08>><3E><10>2<17><16><17> eB<01>
<EFBFBD> <0C> <0C>eB<01><11>eB<01> <11>eB<01><13> eB<01>
<11> eB<01>P%<0E>P <0C>z<EFBFBD><19><08>F<EFBFBD>r