Skip to main content
GenieACS handles L3/TR-069 management of routers and ONUs (WiFi config, firmware updates, diagnostics). For L2/OMCI management of GPON OLTs and ONU port mapping, FyberPay integrates with SmartOLT in parallel. The two systems are orchestrated together so a one-click ONU setup writes the right configuration through both channels.
FyberPay integrates with GenieACS, an open-source TR-069 (CWMP) auto-configuration server, to remotely manage subscriber CPE devices. This enables ISPs to provision ONTs, routers, and access points without truck rolls.

Architecture

FyberPay communicates with GenieACS through the NBI (Northbound Interface) REST API on port 7557. CPE devices connect to GenieACS via the CWMP protocol on port 7547. The GenieACS File Server on port 7567 serves firmware images and diagnostic files.

Supported Device Types

FyberPay works with any TR-069 compliant device. Common device types in East African ISP deployments:

Auto-Discovery and Registration

When a CPE device first connects to GenieACS (BOOTSTRAP event), FyberPay automatically identifies and registers it.
1

Device connects to GenieACS

The CPE sends its first Inform message to GenieACS. GenieACS triggers the 0 BOOTSTRAP event.
2

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.
3

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 = null and appears in the Pending Devices list.
4

Periodic inform configured

The bootstrap script sets the periodic inform interval to 300 seconds (5 minutes):
This ensures FyberPay receives regular health updates from every managed device.

Device Claiming and Assignment

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:
FyberPay also applies GenieACS tags for tracking:
  • sub:username to link the device to the subscriber
  • plan:group-name to indicate which service plan the device is on
When a device is reassigned to a different subscriber, the old tags are removed and new ones are applied.

Remote Configuration

WiFi Settings

Update a device’s WiFi SSID and password remotely:
FyberPay sends the following TR-069 parameters:
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:
The 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:
Firmware metadata (OUI, product class, version) is stored alongside the file so GenieACS can match firmware to compatible devices.

Deploying Firmware

Push firmware updates to all devices of a specific model within an organization:
FyberPay sends a download task to each matching device. GenieACS instructs the CPE to download and install the firmware via TR-069.
Firmware updates cause a device reboot. Schedule deployments during off-peak hours. The deploy endpoint returns the count of succeeded and failed tasks so you can monitor progress.

Diagnostics

Speed Test

Trigger a download speed test on a CPE device:
FyberPay automatically uploads a 10MB random binary file to the GenieACS file server for speed testing. If no downloadUrl is provided, this default file is used. The CPE uses TR-069 Download Diagnostics to measure throughput:

Ping Test

Run a ping diagnostic from the CPE to a target host:

Retrieving Diagnostic Results

Returns the latest download, upload, and ping diagnostic results stored on the device.

Health Monitoring

FyberPay uploads a health check provision that runs on every periodic inform (every 5 minutes):
This data feeds the CPE dashboard:

Dashboard Endpoint

Returns aggregate stats for all CPE devices in the organization:
staleDevices counts devices that have been offline for more than 1 hour.

Background Sync

FyberPay runs two BullMQ background processors for GenieACS:
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
New devices discovered in GenieACS that are not in FyberPay’s database are auto-created as unassigned CPE records.
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:
Custom provisions are namespaced with the organization slug to prevent collisions between ISPs: acme-custom-provision.

Device Management Actions

All write operations are recorded in FyberPay’s audit log.

Required Environment Variables

If GENIEACS_NBI_URL is not set, FyberPay skips all GenieACS bootstrap operations on startup. Set this variable to enable CPE management.

Troubleshooting

  1. Verify the CPE is connecting to GenieACS: check GET /devices/ on the GenieACS NBI (port 7557)
  2. Confirm the bootstrap provision is uploaded: GET /provisions/fyberpay-bootstrap
  3. Check that GENIEACS_INTERNAL_KEY matches between GenieACS ext script config and FyberPay’s env
  4. Review FyberPay API logs for the internal /internal/cpe/identify endpoint
  1. Confirm the device is assigned to a subscriber who has an active subscription
  2. Check that the subscription has PPPoE credentials set (username and encrypted password)
  3. Verify GenieACS can reach the device (check for connection request failures in GenieACS faults)
  4. Try manually triggering a connection request from the GenieACS UI
  1. Check the task status in GenieACS: GET /tasks/?query={"device":"device-id"}
  2. Look for faults related to the device: GET /faults/?query={"device":"device-id"}
  3. Verify the firmware file exists in GenieACS: GET /files/
  4. Confirm the firmware OUI and product class match the target device
  5. Some devices require a reboot before accepting firmware; try rebooting first
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
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.