Control my camero with blynk and particle electron

Hello freinds I have my car camero has two fob keys
I thought to hack the spare one and make it work with blynk and electron so am able to turn on my car from far away if it’s in the summer and the weather hot or the winter the weather freezing specially when I get of work other than that if am close like home I can control it with my keys to avoid spending data .
so what am using is
1-particle electron
2-8 channel relay 5VDC
3-OBDII to get the 12VDC all time and also has the converter to 5VDC so i can power the electron all time

Car OBD2 Dash Camera DVR Charging Cable Micro USB Power Adapter with Switch Button - 16Pin OBD2 Connector Direct Charger for Gps Camcorder Tablet E-dog Phone(HTC Samsung Blackberry) - 11.5FT 12-24V https://www.amazon.com/dp/B01H38IO86/ref=cm_sw_r_cp_api_Xih5ybV8BY216

4-uln2803a i used because the feed back that am getting when the engine on or off i took it from the back light and its + but my relay is ACTIVE LOW the others i was able to change them in the code but this one i had to put this uln2803a
5-female connector 12vdc to attach it to the feed back break lights
6- 12VDC male car connector with USB to get the singal feed back 5VDC to energize the relay .
7- USB wire .

Here is the code and some pics
And it will be my pleasure if any one make any improve in the code or any idea I will be more than happy to make the projec better .
Thanks for blynk community to provide us this amazing app also the crew blynk that always answer our qs and solve our problems .

and yes USE ``` when u post the code lol

// This #include statement was automatically added by the Particle IDE.
#include <SparkCorePolledTimer.h>

// This #include statement was automatically added by the Particle IDE.
#include <blynk.h>



// This #include statement was automatically added by the Particle IDE.
// Set Blynk hertbeat interval.
// Each heartbeat uses ~90 bytes of data.
#define BLYNK_HEARTBEAT 1200

// Set Particle keep-alive ping interval.
// Each ping uses 121 bytes of data.
//#define PARTICLE_KEEPALIVE 20000


#define LOCK D0
#define UNLOCK D1
#define TRUNK D2
#define PANIC D3
#define ENGINE_START D4
#define ARM D5
#define Engine_Status D6

SparkCorePolledTimer updateTimer(5000); //Create a timer object and set it's timeout in milliseconds
void OnTimer(void); //Prototype for timer callback method

int ENGINE_STATUS=0;

void setup()
{
  Serial.begin(9600); // See the connection status in Serial Monitor
  Blynk.begin("xxx", IPAddress(45,55,130,102), 8442);  // Here your Arduino connects to the Blynk Cloud.
  
 updateTimer.SetCallback(OnTimer); 
  
  pinMode(LOCK,OUTPUT);
  pinMode(UNLOCK,OUTPUT);
  pinMode(TRUNK,OUTPUT);
  pinMode(PANIC,OUTPUT);
  pinMode(ENGINE_START,OUTPUT);
  pinMode(ARM,OUTPUT);
  pinMode(Engine_Status,INPUT);
  
  digitalWrite(LOCK,HIGH);
  digitalWrite(UNLOCK,HIGH);
  digitalWrite(TRUNK,HIGH);
  digitalWrite(PANIC,HIGH);
  digitalWrite(ENGINE_START,HIGH);
  digitalWrite(ARM,HIGH);
 
    
}

void OnTimer(void) {
    ENGINE_STATUS = digitalRead(Engine_Status);
    if (ENGINE_STATUS == HIGH){
        
        Blynk.virtualWrite(V7,"ENGINE ON "); 
        
    }
    else {
       Blynk.virtualWrite(V7,"ENGINE OFF ");  
    }
    
    Blynk.virtualWrite(V8,"LOCK ");
    Blynk.virtualWrite(V9,"UNLOCK ");
    Blynk.virtualWrite(V10,"PANIC ");
    Blynk.virtualWrite(V11,"TRUNK ");
    Blynk.virtualWrite(V12,"ENGINE START ");
    Blynk.virtualWrite(V13,"ARM/ACTIVE ");
}
// Lock

BLYNK_WRITE(V0) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(LOCK,LOW);
}
else if (state ==0)
{
digitalWrite(LOCK,HIGH);
}
}
//Unlock

BLYNK_WRITE(V1) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(UNLOCK,LOW);
}
else if (state ==0)
{
digitalWrite(UNLOCK,HIGH);
}
}
//Trunk

BLYNK_WRITE(V2) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(TRUNK,LOW);
}
else if (state ==0)
{
digitalWrite(TRUNK,HIGH);
}
}
//Panic

BLYNK_WRITE(V3) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(PANIC,LOW);
}
else if (state ==0)
{
digitalWrite(PANIC,HIGH);
}
}
// ENGINE_START

BLYNK_WRITE(V4) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(ENGINE_START,LOW);
}
else if (state ==0)
{
digitalWrite(ENGINE_START,HIGH);
}
}

// ARM /active 
BLYNK_WRITE(V5) //Function to test status from BLYNK widget to PHOTON
{
int state = param.asInt();
if (state ==1)
{
digitalWrite(ARM,LOW);
Blynk.virtualWrite(V6,"CAR ARMED "); 
}
else if (state ==0)
{
digitalWrite(ARM,HIGH);
Blynk.virtualWrite(V6,"CAR DISARMED "); 
}
}

void loop()
{

  Blynk.run(); 
  updateTimer.Update();
}

thanks