Skip to content

Customization Possibilities

Customization Possibilities

This section explores how the RFID asset tracking system can be customized to meet different buyer requirements on Alibaba.com. As a pre-sales engineer, use this information to discuss modification options and help buyers understand what changes are feasible, including effort estimates and trade-offs.

Before reading this section, ensure you are familiar with:

  • The baseline system architecture (05-01)
  • Technical capability assessment (05-11)
  • Buyer’s specific requirements for customization

The asset tracking system can be customized along several dimensions:

Customization Dimensions:
┌──────────────────────────────────────────────┐
│ 1. Hardware Modifications │
│ ├── Different RFID frequency/reader │
│ ├── Additional sensors (temperature, etc) │
│ ├── Display screen integration │
│ └── Enclosure and mounting options │
├──────────────────────────────────────────────┤
│ 2. Software / Firmware Customization │
│ ├── ESP32 firmware behavior │
│ ├── Node-RED flow logic │
│ ├── Alternative backend systems │
│ └── Data export/import formats │
├──────────────────────────────────────────────┤
│ 3. User Experience Customization │
│ ├── LED/sound feedback patterns │
│ ├── Integration with existing systems │
│ ├── Mobile app / web dashboard │
│ └── Multi-language support │
└──────────────────────────────────────────────┘

Buyer Scenario: Factory wants employees to be identified without stopping to tap a tag.

OptionModuleRead RangeCost ImpactComplexity
Stock solutionRC5223-5 cmBaselineNone
Higher gain readerPN5325-10 cm+$3-5Low
Long-range HFRDM630010-15 cm+$5-8Medium
UHF RFIDM6e Nano3-10 m+$50-80High

Implementation Notes:

  • PN532 is drop-in compatible with similar library support
  • UHF RFID requires dedicated module and antenna tuning
  • Gateway mode: ESP32 reads UHF module via UART/SPI

Feasibility Assessment:

For RC522 → PN532 upgrade: Low effort, 2-3 hours of firmware changes, same MFRC522 API.

For UHF upgrade: Medium effort, 1-2 weeks, needs new hardware validation and library integration.

Buyer Scenario: Company has 3 factory entrances and needs check-in at all of them.

┌───────────────────┐
│ MQTT Broker │
│ (Mosquitto/EMQX) │
└──┬────┬────┬─────┘
│ │ │
┌──────┘ │ └──────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Reader 1 │ │ Reader 2 │ │ Reader 3 │
│ (Gate A) │ │ (Gate B) │ │ (Gate C) │
└──────────┘ └──────────┘ └──────────┘

Configuration Changes:

// ESP32 firmware: Set unique reader ID
#define READER_ID "GATE_A" // Change per device
void publishTagData(String uid) {
String json = "{\"uid\":\"" + uid +
"\",\"reader\":\"" + READER_ID +
"\",\"name\":\"" + getTagName(uid) + "\"}";
client.publish("asset/tracking/tag", json.c_str());
}

Node-RED Flow Change:

// Use per-reader file naming to avoid conflict
const readerID = msg.payload.reader || "DEFAULT";
msg.filename = "timerecord_" + readerID + ".txt";

Cost Estimate: Add ~$8-10 per additional reader station (ESP32 + RC522).

Buyer Scenario: Workers want to see their name and check-in time on a screen.

Add an OLED or LCD display to show:

┌──────────────────────┐
│ ✓ Checked In │
│ Name: John Smith │
│ Time: 08:32:15 │
│ │
│ Today: 7h 42m │
└──────────────────────┘

Hardware:

// I2C OLED Display (128x64)
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
void displayCheckIn(String name, String time) {
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 0);
display.println("CHECKED IN");
display.setTextSize(1);
display.print("Name: ");
display.println(name);
display.print("Time: ");
display.println(time);
display.display();
}

Cost Impact: +$3-5 for OLED display module.

Option 4: Alternative Time Tracking Backend

Section titled “Option 4: Alternative Time Tracking Backend”

Buyer Scenario: Company already uses a different time tracking system (e.g., Toggl, Clockify, custom HR system).

Integration Options:

BackendIntegration MethodEffortNotes
Another REST APIHTTP POSTLowAny system with API
Google SheetsSheets APIMediumGood for small teams
MariaDB/MySQLSQL INSERTMediumRequires Node-RED MySQL plugin
InfluxDBWrite APIMediumTime-series optimized
Custom APIHTTP endpointLowDefine your own format

Example: Custom HTTP API Integration:

// Node-RED Function: Custom API Integration
// Replace TimeTagger POST with any REST API
const customAPI = "https://hr.company.com/api/timelog";
const apiKey = "your-api-key";
msg.headers = {
"X-API-Key": apiKey,
"Content-Type": "application/json"
};
msg.method = "POST";
msg.url = customAPI;
// Transform to fit the target API schema
msg.payload = {
employee_id: msg.record.ds,
timestamp_start: msg.record.t1,
timestamp_end: msg.record.t2,
source: "ESP32_RFID_READER"
};
return msg;

Feasibility: 1-3 days for most REST API integrations. Requires API documentation from target system.

Buyer Scenario: Network connectivity is unreliable, want to batch-process records.

Implementation using ESP32 Preferences library:

#include <Preferences.h>
Preferences preferences;
void saveRecordToLocal(String uid, String action) {
preferences.begin("rfid-records", false);
// Generate unique record ID
int recordID = preferences.getInt("recordCount", 0) + 1;
// Store record
String key = "rec_" + String(recordID);
String value = String(millis()) + "," + uid + "," + action;
preferences.putString(key.c_str(), value);
// Update counter
preferences.putInt("recordCount", recordID);
preferences.end();
}
void syncPendingRecords() {
preferences.begin("rfid-records", false);
int count = preferences.getInt("recordCount", 0);
for (int i = 1; i <= count; i++) {
String key = "rec_" + String(i);
String record = preferences.getString(key.c_str(), "");
if (record.length() > 0) {
// Publish to MQTT
client.publish("asset/tracking/batch", record.c_str());
// Optionally delete after sync
preferences.remove(key.c_str());
}
}
preferences.putInt("recordCount", 0);
preferences.end();
}

Limitations:

  • ESP32 flash memory: ~1000-3000 records max (ESP32 has limited NVS storage)
  • For larger local storage, add an SD card module
  • Battery concerns: sync requires extended wake time

Buyer Scenario: Want a fully custom solution without TimeTagger.

Alternative Backend Stacks:

StackComponentsSuitabilityEffort
Node.js + MongoDBCustom REST APIFlexible, scalable2-4 weeks
FirebaseCloud FirestoreQuick setup, cloud1-2 weeks
SupabasePostgreSQLOpen source, real-time1-2 weeks
AirtableNo-code databaseZero coding3-5 days
Home AssistantIoT platformSmart home integration1 week

Requirements:

  • Employee badge tap-in/tap-out
  • Daily/weekly/monthly reports
  • Overtime calculation
  • Integration with payroll

Modifications Needed:

ChangeAreaEffort
Employee databaseNode-RED + SQLite2-3 days
Report generationGrafana dashboard1-2 days
Overtime rulesNode-RED function logic1 day
Payroll exportCSV/API export1 day

Total Estimated Customization: 5-7 days

Requirements:

  • Workers tap both their badge and the tool before taking it
  • System logs who took which tool and when
  • Alerts if tool is not returned within expected time
  • Track maintenance schedule based on usage

Modifications Needed:

Flow: Two-Tag Approach
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Employee │ │ Tool │ │ System │
│ Badge │ → │ Tag │ → │ Records │
└──────────┘ └──────────┘ └──────────┘
// Node-RED: Two-tag sequencing logic
// First tag = employee, Second tag = tool
const currentState = context.get("sequenceState") || "WAITING_EMPLOYEE";
if (currentState === "WAITING_EMPLOYEE") {
// Store employee info
context.set("currentEmployee", msg.payload);
context.set("sequenceState", "WAITING_TOOL");
context.set("sequenceStartTime", Date.now());
msg.feedback = { action: "SCAN_TOOL_NEXT" };
} else if (currentState === "WAITING_TOOL") {
const employee = context.get("currentEmployee");
const tool = msg.payload;
// Create combined record
msg.payload = {
employee: employee.name,
tool: tool.name,
action: "TOOK_TOOL",
timestamp: Math.floor(Date.now() / 1000)
};
// Reset sequence
context.set("sequenceState", "WAITING_EMPLOYEE");
}

Total Estimated Customization: 5-10 days (depending on alert complexity)

Requirements:

  • Visitor taps temporary badge at reception
  • System notifies host via MQTT/email
  • Visitor badge expires after set time
  • Audit log of all visitors

Modifications Needed:

// Node-RED: Temporary badge handling
const badgeUID = msg.payload.uid;
const tempBadges = context.get("tempBadges") || {};
if (tempBadges[badgeUID]) {
// Badge was issued — this is check-out
const visitor = tempBadges[badgeUID];
// Create visitor record
msg.payload = {
type: "VISITOR_CHECKOUT",
name: visitor.name,
host: visitor.host,
duration: Math.floor(Date.now() / 1000) - visitor.checkInTime
};
// Remove from active badges
delete tempBadges[badgeUID];
context.set("tempBadges", tempBadges);
// Notify host
sendNotification(visitor.host, "Visitor " + visitor.name + " has left");
} else {
// Unknown badge — need to register first
msg.feedback = { action: "REGISTER_VISITOR", uid: badgeUID };
}

Total Estimated Customization: 3-5 days

IntegrationMethodEffortValue
Alibaba Cloud IoT PlatformMQTT bridgeMediumCloud scalability
DingTalkAPILowEmployee notifications
Alibaba.com buyer appCustom APIHighBuyer-facing tracking
1688.com supplier portalAPIMediumSupply chain tracking
CustomizationEffortCost ImpactRisk
Change RFID reader model2-8 hours+$3-80Low
Multi-reader deployment1-2 days+$8-10/readerLow
Add display screen4-8 hours+$3-5Low
Change backend system1-5 daysFree (software)Medium
Local storage (SD card)2-3 days+$3-5Medium
Two-tag tool tracking3-5 daysFree (software)Medium
Visitor management3-5 daysFree (software)Low
Payroll integration5-7 daysFree (software)High
Full backend replacement1-4 weeksFree to $100/moHigh

For buyers asking about customizations:

  1. Listen to requirements: Understand the core need
  2. Map to existing capability: Many features are already in the system
  3. Identify gaps: What needs to be built or changed
  4. Estimate effort: Use the table above
  5. Propose phased approach: Start with core, add features later

Sample Conversation Flow:

Buyer: “We need to track 200 employees at 3 factory gates, and we want the data to go into our existing HR system.”

You: “Great, here’s what we can do:

Phase 1 (1-2 weeks): Deploy 3 RFID readers at 3 gates, basic check-in/check-out with TimeTagger backend. All 200 employees get RFID tags. ~$300 hardware + 2 weeks implementation.

Phase 2 (1 week): Add custom API integration to send records to your existing HR system. We’ll match the data format to your API.

Phase 3 (optional): Add real-time attendance dashboard with Grafana, overtime alerts, and custom reports.

The core system is open source, so there are no recurring license fees. You only pay for hardware and implementation.”

  • Recommended: Start with the baseline system, validate it works, then customize
  • Recommended: Use MQTT for decoupling — hardware changes don’t affect backend logic
  • Recommended: Document all customizations for future maintenance
  • Avoid: Over-customizing before proving the base system works
  • Avoid: Using proprietary protocols over the open-source stack
  • Avoid: Taking on complex customizations without clear buyer requirements
  1. Hardware customizations: Change reader, add display, add local storage
  2. Backend customizations: Different API, different database, custom integration
  3. Use case adaptations: Attendance, tool tracking, visitor management
  4. Effort estimation: Most customizations are 1-10 days; full replacements take weeks
  5. Phased approach: Start simple, add features based on buyer needs and budget

Writing Date: 2026-05-17
Target Audience: Alibaba.com IoT Pre-sales Engineer
Status: ✅ Completed