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