Architecture
Supported Device Types
FyberPay works with any TR-069 compliant device. Common device types in East African ISP deployments:| Device Type | Examples | Common Use Case |
|---|---|---|
| GPON ONTs | Huawei HG8245H, ZTE F660, Nokia G-240W-A | Fiber-to-the-home (FTTH) |
| Wireless routers | TP-Link Archer, Tenda, Netis | Last-mile WiFi |
| ONU/ONTs | V-SOL, VSOL, C-Data | Fiber access network |
| Mesh systems | TP-Link Deco, Tenda Nova | Multi-room coverage |
Auto-Discovery and Registration
When a CPE device first connects to GenieACS (BOOTSTRAP event), FyberPay automatically identifies and registers it.Device connects to GenieACS
The CPE sends its first Inform message to GenieACS. GenieACS triggers the
0 BOOTSTRAP event.Bootstrap provision runs
FyberPay uploads a bootstrap provision script to GenieACS on startup. This script runs on every new device:The
ext() call hits FyberPay’s internal API to look up the device by serial number.Device identification
FyberPay checks if the device’s serial number matches any known CPE in the database:
- Known device (assigned to an org and subscriber): Tags are applied for the organization, subscriber username, and plan. PPPoE credentials are pushed to the device.
- Known device (assigned to org, no subscriber): Only the organization tag is applied.
- Unknown device: A new CPE record is created with
orgId = nulland appears in the Pending Devices list.
Device Claiming and Assignment
- ISP Admin Claims Device
- Platform Admin Assigns Device
ISP administrators can claim unassigned devices from the Pending Devices list. Claiming assigns the device to the ISP’s organization.This publishes a
cpe.claimed event through the outbox.Subscriber Assignment and PPPoE Provisioning
When a CPE device is assigned to a subscriber, FyberPay pushes the subscriber’s PPPoE credentials directly to the device via TR-069:sub:usernameto link the device to the subscriberplan:group-nameto indicate which service plan the device is on
Remote Configuration
WiFi Settings
Update a device’s WiFi SSID and password remotely:| Parameter | Value |
|---|---|
Device.WiFi.SSID.1.SSID | The new SSID |
Device.WiFi.AccessPoint.1.Security.KeyPassphrase | The new WPA2 password |
WiFi passwords must be at least 8 characters (WPA2 minimum requirement). FyberPay validates this before sending the task to GenieACS.
Custom Parameter Configuration
For advanced use cases, FyberPay can set arbitrary TR-069 parameters on any device:connection_request flag tells GenieACS to wake up the device immediately rather than waiting for the next periodic inform.
Firmware Management
Uploading Firmware
Upload firmware images to the GenieACS file server for later deployment:Deploying Firmware
Push firmware updates to all devices of a specific model within an organization:download task to each matching device. GenieACS instructs the CPE to download and install the firmware via TR-069.
Diagnostics
Speed Test
Trigger a download speed test on a CPE device:downloadUrl is provided, this default file is used.
The CPE uses TR-069 Download Diagnostics to measure throughput:
| Parameter | Value |
|---|---|
Device.IP.Diagnostics.DownloadDiagnostics.DownloadURL | Test file URL |
Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState | Requested |
Ping Test
Run a ping diagnostic from the CPE to a target host:| Parameter | Value |
|---|---|
Device.IP.Diagnostics.IPPing.Host | Target hostname or IP |
Device.IP.Diagnostics.IPPing.NumberOfRepetitions | 10 |
Device.IP.Diagnostics.IPPing.Timeout | 5000 (ms) |
Device.IP.Diagnostics.IPPing.DiagnosticsState | Requested |
Retrieving Diagnostic Results
Health Monitoring
FyberPay uploads a health check provision that runs on every periodic inform (every 5 minutes):| Metric | Source |
|---|---|
| Online/offline status | Last inform timestamp (offline if > 10 minutes ago) |
| Firmware version | Device.DeviceInfo.SoftwareVersion |
| Uptime | Device.DeviceInfo.UpTime |
| CPU usage | Device.DeviceInfo.ProcessStatus.CPUUsage |
| Free memory | Device.DeviceInfo.MemoryStatus.Free |
| Traffic stats | Device.IP.Interface.1.Stats.BytesSent/BytesReceived |
| Connected WiFi clients | Device.WiFi.AccessPoint.1.AssociatedDeviceNumberOfEntries |
Dashboard Endpoint
staleDevices counts devices that have been offline for more than 1 hour.
Background Sync
FyberPay runs two BullMQ background processors for GenieACS:Device Sync (genieacs-sync)
Device Sync (genieacs-sync)
Periodically fetches all devices from GenieACS and syncs them with FyberPay’s database. Updates:
- Last inform timestamp
- Online/offline status
- Firmware version
- Manufacturer and model
Fault Polling (genieacs-fault-poll)
Fault Polling (genieacs-fault-poll)
Periodically polls GenieACS for active faults and matches them to known CPE devices. Faults are logged with the device serial number and organization for visibility.Faults can be viewed and cleared from the admin dashboard:
Custom Provisions
ISP administrators can upload custom provisioning scripts that run on their devices:acme-custom-provision.
Device Management Actions
| Action | Endpoint | Effect |
|---|---|---|
| Reboot | POST /cpe/devices/:id/reboot | Sends a TR-069 reboot command |
| Factory Reset | POST /cpe/devices/:id/factory-reset | Restores device to factory defaults |
| WiFi Config | POST /cpe/devices/:id/wifi | Updates SSID and password |
| Speed Test | POST /cpe/devices/:id/speed-test | Triggers download diagnostics |
| Assign Subscriber | POST /cpe/devices/:id/assign-subscriber | Links device to a subscriber and pushes PPPoE credentials |
Required Environment Variables
Troubleshooting
Device not appearing in Pending Devices
Device not appearing in Pending Devices
- Verify the CPE is connecting to GenieACS: check
GET /devices/on the GenieACS NBI (port 7557) - Confirm the bootstrap provision is uploaded:
GET /provisions/fyberpay-bootstrap - Check that
GENIEACS_INTERNAL_KEYmatches between GenieACS ext script config and FyberPay’s env - Review FyberPay API logs for the internal
/internal/cpe/identifyendpoint
PPPoE credentials not pushed to device
PPPoE credentials not pushed to device
- Confirm the device is assigned to a subscriber who has an active subscription
- Check that the subscription has PPPoE credentials set (username and encrypted password)
- Verify GenieACS can reach the device (check for connection request failures in GenieACS faults)
- Try manually triggering a connection request from the GenieACS UI
Firmware update stuck
Firmware update stuck
- Check the task status in GenieACS:
GET /tasks/?query={"device":"device-id"} - Look for faults related to the device:
GET /faults/?query={"device":"device-id"} - Verify the firmware file exists in GenieACS:
GET /files/ - Confirm the firmware OUI and product class match the target device
- Some devices require a reboot before accepting firmware; try rebooting first
Device shows as offline
Device shows as offline
A device is considered offline if its last inform was more than 10 minutes ago. Possible causes:
- Device lost power or internet connectivity
- The periodic inform interval was not set (bootstrap did not run)
- GenieACS cannot reach the device for connection requests (NAT or firewall issues)
- The device sync processor has not run recently
Circuit breaker open for GenieACS
Circuit breaker open for GenieACS
All GenieACS API calls are wrapped in a circuit breaker. If GenieACS is down or consistently returning errors, the circuit opens and FyberPay stops sending requests temporarily. Check GenieACS container health:
docker logs genieacs.