16
16
using Newtonsoft . Json ;
17
17
using System . Diagnostics ;
18
18
using System . Data . Common ;
19
+ using System . Security . Cryptography ;
19
20
20
21
namespace TeslaLogger
21
22
{
@@ -3981,6 +3982,25 @@ internal static void UpdateAddress(Car c, int posid)
3981
3982
}
3982
3983
}
3983
3984
3985
+ DateTime ? GetDatumFromPos ( int PosId )
3986
+ {
3987
+ using ( MySqlConnection con = new MySqlConnection ( DBConnectionstring ) )
3988
+ {
3989
+ con . Open ( ) ;
3990
+ using ( MySqlCommand cmd = new MySqlCommand ( "select Datum from pos where id = @id" , con ) )
3991
+ {
3992
+ cmd . Parameters . AddWithValue ( "@id" , PosId ) ;
3993
+ MySqlDataReader dr = SQLTracer . TraceDR ( cmd ) ;
3994
+ if ( dr . Read ( ) )
3995
+ {
3996
+ return ( DateTime ) dr [ 0 ] ;
3997
+ }
3998
+ }
3999
+ }
4000
+
4001
+ return null ;
4002
+ }
4003
+
3984
4004
private void UpdateDriveStatistics ( int startPos , int endPos , bool logging = false )
3985
4005
{
3986
4006
try
@@ -3990,6 +4010,20 @@ private void UpdateDriveStatistics(int startPos, int endPos, bool logging = fals
3990
4010
car . Log ( "UpdateDriveStatistics" ) ;
3991
4011
}
3992
4012
4013
+ DateTime ? startDT = GetDatumFromPos ( startPos ) ;
4014
+ DateTime ? endDT = GetDatumFromPos ( endPos ) ;
4015
+ int ap_sec_sum = - 1 ;
4016
+ int ap_sec_max = - 1 ;
4017
+ double TPMS_FL = - 1 ;
4018
+ double TPMS_FR = - 1 ;
4019
+ double TPMS_RL = - 1 ;
4020
+ double TPMS_RR = - 1 ;
4021
+ if ( startDT != null && endDT != null )
4022
+ {
4023
+ GetAutopilotSeconds ( ( DateTime ) startDT , ( DateTime ) endDT , out ap_sec_sum , out ap_sec_max ) ;
4024
+ GetAVG_TPMS ( ( DateTime ) startDT , ( DateTime ) endDT , out TPMS_FL , out TPMS_FR , out TPMS_RL , out TPMS_RR ) ;
4025
+ }
4026
+
3993
4027
using ( MySqlConnection con = new MySqlConnection ( DBConnectionstring ) )
3994
4028
{
3995
4029
con . Open ( ) ;
@@ -4017,17 +4051,23 @@ id BETWEEN @startpos AND @endpos
4017
4051
{
4018
4052
con2 . Open ( ) ;
4019
4053
using ( MySqlCommand cmd2 = new MySqlCommand ( @"
4020
- UPDATE
4021
- drivestate
4022
- SET
4023
- outside_temp_avg = @outside_temp_avg,
4024
- speed_max = @speed_max,
4025
- power_max = @power_max,
4026
- power_min = @power_min,
4027
- power_avg = @power_avg
4028
- WHERE
4029
- StartPos = @StartPos
4030
- AND EndPos = @EndPos " , con2 ) )
4054
+ UPDATE
4055
+ drivestate
4056
+ SET
4057
+ outside_temp_avg = @outside_temp_avg,
4058
+ speed_max = @speed_max,
4059
+ power_max = @power_max,
4060
+ power_min = @power_min,
4061
+ power_avg = @power_avg,
4062
+ AP_sec_sum = @ap_sec_sum,
4063
+ AP_sec_max = @AP_sec_max,
4064
+ TPMS_FL = @TPMS_FL,
4065
+ TPMS_FR = @TPMS_FR,
4066
+ TPMS_RL = @TPMS_RL,
4067
+ TPMS_RR = @TPMS_RR
4068
+ WHERE
4069
+ StartPos = @StartPos
4070
+ AND EndPos = @EndPos " , con2 ) )
4031
4071
{
4032
4072
cmd2 . Parameters . AddWithValue ( "@StartPos" , startPos ) ;
4033
4073
cmd2 . Parameters . AddWithValue ( "@EndPos" , endPos ) ;
@@ -4038,6 +4078,23 @@ id BETWEEN @startpos AND @endpos
4038
4078
cmd2 . Parameters . AddWithValue ( "@power_min" , dr [ "power_min" ] ) ;
4039
4079
cmd2 . Parameters . AddWithValue ( "@power_avg" , dr [ "power_avg" ] ) ;
4040
4080
4081
+ if ( ap_sec_sum != - 1 && ap_sec_max != - 1 )
4082
+ {
4083
+ cmd2 . Parameters . AddWithValue ( "@ap_sec_sum" , ap_sec_sum ) ;
4084
+ cmd2 . Parameters . AddWithValue ( "@AP_sec_max" , ap_sec_max ) ;
4085
+ }
4086
+ else
4087
+ {
4088
+ cmd2 . Parameters . AddWithValue ( "@ap_sec_sum" , DBNull . Value ) ;
4089
+ cmd2 . Parameters . AddWithValue ( "@AP_sec_max" , DBNull . Value ) ;
4090
+ }
4091
+
4092
+ cmd2 . Parameters . AddWithValue ( "@TPMS_FL" , TPMS_FL > 0 ? ( object ) TPMS_FL : ( object ) DBNull . Value ) ;
4093
+ cmd2 . Parameters . AddWithValue ( "@TPMS_FR" , TPMS_FR > 0 ? ( object ) TPMS_FR : ( object ) DBNull . Value ) ;
4094
+ cmd2 . Parameters . AddWithValue ( "@TPMS_RL" , TPMS_RL > 0 ? ( object ) TPMS_RL : ( object ) DBNull . Value ) ;
4095
+ cmd2 . Parameters . AddWithValue ( "@TPMS_RR" , TPMS_RR > 0 ? ( object ) TPMS_RR : ( object ) DBNull . Value ) ;
4096
+
4097
+
4041
4098
_ = SQLTracer . TraceNQ ( cmd2 , out _ ) ;
4042
4099
}
4043
4100
}
@@ -4075,7 +4132,7 @@ id BETWEEN @startpos AND @endpos
4075
4132
WHERE
4076
4133
id > @startPos
4077
4134
AND ideal_battery_range_km IS NOT NULL
4078
- AND battery_level IS BOT NULL
4135
+ AND battery_level IS NOT NULL
4079
4136
AND CarID = @CarID
4080
4137
ORDER BY
4081
4138
id ASC
@@ -4211,8 +4268,44 @@ id DESC
4211
4268
car . CreateExceptionlessClient ( ex ) . Submit ( ) ;
4212
4269
car . Log ( ex . ToString ( ) ) ;
4213
4270
}
4214
- }
4215
-
4271
+ }
4272
+
4273
+ private void GetAVG_TPMS ( DateTime startDT , DateTime endDT , out double tPMS_FL , out double tPMS_FR , out double tPMS_RL , out double tPMS_RR )
4274
+ {
4275
+ tPMS_FL = - 1 ;
4276
+ tPMS_FR = - 1 ;
4277
+ tPMS_RL = - 1 ;
4278
+ tPMS_RR = - 1 ;
4279
+
4280
+ if ( startDT < new DateTime ( 2022 , 11 , 20 ) ) // Feature was introduced later
4281
+ return ;
4282
+
4283
+ using ( MySqlConnection con = new MySqlConnection ( DBConnectionstring ) )
4284
+ {
4285
+ con . Open ( ) ;
4286
+ using ( MySqlCommand cmd = new MySqlCommand ( @"Select avg(Pressure) as p, Tireid from TPMS
4287
+ where TPMS.Datum > @startdate and TPMS.Datum < @enddate and TPMS.CarId = @carid group by Tireid" , con ) )
4288
+ {
4289
+ cmd . Parameters . AddWithValue ( "@startdate" , startDT . AddHours ( - 1 ) ) ;
4290
+ cmd . Parameters . AddWithValue ( "@enddate" , startDT . AddHours ( 1 ) ) ;
4291
+ cmd . Parameters . AddWithValue ( "@carid" , car . CarInDB ) ;
4292
+ MySqlDataReader dr = SQLTracer . TraceDR ( cmd ) ;
4293
+ while ( dr . Read ( ) )
4294
+ {
4295
+ int Tireid = Convert . ToInt32 ( dr [ "Tireid" ] ) ;
4296
+ double p = Convert . ToDouble ( dr [ "p" ] ) ;
4297
+ switch ( Tireid )
4298
+ {
4299
+ case 1 : tPMS_FL = p ; break ;
4300
+ case 2 : tPMS_FR = p ; break ;
4301
+ case 3 : tPMS_RL = p ; break ;
4302
+ case 4 : tPMS_RR = p ; break ;
4303
+ }
4304
+ }
4305
+ }
4306
+ }
4307
+ }
4308
+
4216
4309
public static bool UpdateIncompleteTrips ( )
4217
4310
{
4218
4311
try
@@ -6826,5 +6919,59 @@ internal bool GetRegion()
6826
6919
6827
6920
return false ;
6828
6921
}
6922
+
6923
+ public bool GetAutopilotSeconds ( DateTime start , DateTime end , out int sumsec , out int maxsec )
6924
+ {
6925
+ sumsec = - 1 ;
6926
+ maxsec = - 1 ;
6927
+ try
6928
+ {
6929
+ if ( start < new DateTime ( 2024 , 2 , 20 ) ) // feature introduced later
6930
+ return false ;
6931
+
6932
+ using ( MySqlConnection con = new MySqlConnection ( DBConnectionstring + ";Allow User Variables=True" ) )
6933
+ {
6934
+ con . Open ( ) ;
6935
+ using ( MySqlCommand cmd = new MySqlCommand ( @"select sum(TIME_TO_SEC(TIMEDIFF(enddate, startdate))) as sumsec, max(TIME_TO_SEC(TIMEDIFF(enddate, startdate))) as maxsec from
6936
+ (
6937
+ select T1.CarID, T1.date as startdate, T1.state as startstate, T2.date as enddate, T2.state as endstate
6938
+ from
6939
+ (select (@rowid1:=@rowid1 + 1) T1rid, carid, date, state from cruisestate
6940
+ where carid=@CarID and date between @start and @end order by date
6941
+ ) as T1
6942
+ left outer join
6943
+ (select (@rowid2:=@rowid2 + 1) T2rid, date, state from cruisestate
6944
+ where carid=@CarID and date between @start and @end order by date
6945
+ ) as T2 on T1rid + 1 = T2rid
6946
+
6947
+ JOIN (SELECT @rowid1:=0) a
6948
+ JOIN (SELECT @rowid2:=0) b
6949
+ ) T3
6950
+ where startstate = 1 " , con ) )
6951
+ {
6952
+ cmd . Parameters . AddWithValue ( "@CarID" , car . CarInDB ) ;
6953
+ cmd . Parameters . AddWithValue ( "@start" , start ) ;
6954
+ cmd . Parameters . AddWithValue ( "@end" , end ) ;
6955
+
6956
+ var dr = cmd . ExecuteReader ( ) ;
6957
+ if ( dr . Read ( ) )
6958
+ {
6959
+ if ( dr [ "sumsec" ] != DBNull . Value )
6960
+ sumsec = Convert . ToInt32 ( dr [ "sumsec" ] ) ;
6961
+
6962
+ if ( dr [ "maxsec" ] != DBNull . Value )
6963
+ maxsec = Convert . ToInt32 ( dr [ "maxsec" ] ) ;
6964
+ return true ;
6965
+ }
6966
+ }
6967
+ }
6968
+ } catch ( Exception ex )
6969
+ {
6970
+ Logfile . Log ( ex . ToString ( ) ) ;
6971
+ ex . ToExceptionless ( ) . Submit ( ) ;
6972
+ }
6973
+
6974
+ return false ;
6975
+ }
6829
6976
}
6830
6977
}
0 commit comments