PHP code example of track-any-device / drivers

1. Go to this page and download the library: Download track-any-device/drivers library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

track-any-device / drivers example snippets


use TrackAnyDevice\Drivers\Contracts\DeviceDriverInterface;

class HandleIncomingSignal
{
    public function __construct(private DeviceDriverInterface $driver) {}

    public function handle(array $rawEvent, Device $device): void
    {
        $signal = $this->driver->parseEventToSignal($rawEvent, $device);

        // $signal is a normalised SignalObject regardless of device model
    }
}

$signal->eventType;       // SignalEventType enum
$signal->source;          // SignalSource enum (stream_jt808 | gsm_sms | …)
$signal->latitude;        // ?float
$signal->longitude;       // ?float
$signal->speed;           // ?float  km/h
$signal->direction;       // ?int    degrees
$signal->gpsFixed;        // bool
$signal->batteryPercent;  // ?int
$signal->gsmSignal;       // ?int
$signal->workingMode;     // ?string
$signal->alarmFlags;      // ?int    bitmask
$signal->deviceTime;      // ?CarbonImmutable (UTC)
$signal->rawPayload;      // ?string original frame / SMS body

if ($signal->hasLocation()) {
    // $signal->latitude and $signal->longitude are both non-null
}

$signal = $signal->withServerTime(CarbonImmutable::now());

$array  = $signal->toArray();
$signal = SignalObject::fromArray($array);

$signal = $driver->parseEventToSignal([
    'source'       => 'stream_jt808',
    'msg_id'       => 0x0200,
    'latitude'     => 51.5074,
    'longitude'    => -0.1278,
    'speed'        => 32.5,
    'direction'    => 270,
    'gps_fixed'    => true,
    'alarm_flags'  => 0,
    'status_flags' => 0,
    'device_time'  => '2025-06-01 12:00:00',
], $device);

$signal = $driver->parseSmsToSignal(
    'Lat:51.5074 Lon:-0.1278 Speed:32km/h Battery:78% Signal:4 GPS:Fixed',
    $device
);

$signal = $driver->parseEventToSignal(['raw' => $smsBody], $device);

$driver->requestSignal('location', $device);

$driver->setMode('3', $device, ['interval' => '30S']);

/** @var list<AddOnCommand> */
$commands = $driver->addOnCommands();

foreach ($commands as $cmd) {
    $cmd->name;        // string  machine name
    $cmd->label;       // string  human label
    $cmd->params;      // array   JSON-schema-like param descriptors
    $cmd->category;    // string  'tracking' | 'network' | 'alarm' | 'utility' | …
    $cmd->

$driver->addOnCommand('set_apn', ['apn' => 'internet'], $device);
$driver->addOnCommand('engine_cut', [], $device);
$driver->addOnCommand('set_volume', ['level' => 6], $device);

$driver->onboardingAction($device);

// true when device has reported within the last 10 minutes
$driver->supportsStream($device);

// 'jt808' | 'none'
$driver->getStreamChannel();

use TrackAnyDevice\Drivers\Concerns\QueuesSmsCommands;
use TrackAnyDevice\Drivers\Contracts\DeviceDriverInterface;
use TrackAnyDevice\Drivers\ValueObjects\AddOnCommand;
use TrackAnyDevice\Drivers\ValueObjects\SignalObject;
use TrackAnyDevice\Core\Models\Device;

class MyTrackerDriver implements DeviceDriverInterface
{
    use QueuesSmsCommands;

    public function getStreamChannel(): string { return 'none'; }
    public function supportsStream(Device $device): bool { return false; }

    public function parseEventToSignal(array $rawEvent, Device $device): SignalObject
    {
        return $this->parseSmsToSignal((string) ($rawEvent['raw'] ?? ''), $device);
    }

    public function parseSmsToSignal(string $rawSms, Device $device): SignalObject
    {
        // parse $rawSms and return a SignalObject — never throw
        return new SignalObject(
            eventType: SignalEventType::Update,
            source: SignalSource::GsmSms,
            rawPayload: $rawSms,
        );
    }

    public function requestSignal(string $signalType, Device $device): void
    {
        $this->queueSms('query_location', [], $device);
    }

    public function setMode(string $mode, Device $device, array $params = []): void {}
    public function getMode(Device $device): ?string { return null; }
    public function onboardingAction(Device $device): void {}

    public function addOnCommands(): array { return []; }
    public function addOnCommand(string $commandName, array $parameters, Device $device): void
    {
        $this->queueSms($commandName, $parameters, $device);
    }

    public function buildSmsBody(string $commandType, array $params): ?string
    {
        return match ($commandType) {
            'query_location' => 'WHERE#',
            default          => null,
        };
    }
}

// In a service provider
$this->app->bind(DeviceConnectorInterface::class, SMSConnector::class);