π TR-069 Provisioning
Master TR-069 (CPE WAN Management Protocol) for automated modem and ONT provisioning. Learn how OLTs configure ONTs via OMCI, and how GenieACS (TR-069 server) provisions broadband device settings from the cloud.
βΉοΈ Key Informationβ
- TR-069 β CWMP (CPE WAN Management Protocol) standard for remote device management
- GenieACS β Open-source TR-069 server for device provisioning and management
- OMCI β ONT Management and Control Interface (Layer 2 protocol between OLT and ONT)
- ONT β Optical Network Terminal (subscriber device connected to OLT)
- OLT β Optical Line Terminal (ISP-side network equipment)
- Auto-provisioning β Zero-touch device configuration without manual setup
- Device parameters β WAN, VLAN, QoS, DNS, DHCP, and firmware settings managed remotely
- TR-069 requires working Internet connectivity from device to ACS server
- OMCI provisioning requires OLT-ONT optical connection to be established
- Incorrect VLAN configuration can prevent TR-069 communication
- GenieACS database and Redis cache must be monitored for performance
- Device firmware updates via TR-069 can cause temporary outages
- OMCI messages are Layer 2 - not routable beyond OLT port
β Prerequisitesβ
- OLT device supporting OMCI (VSOL, BSCom, Huawei, ZTE, etc.)
- ONTs compatible with OLT and TR-069
- GenieACS server deployed (on router, Linux VM, or cloud)
- Network connectivity: OLT β GenieACS server (typically management network)
- Management VLAN configured on OLT and router
- Basic understanding of OMCI, VLAN, and DHCP
π§ Configurationβ
Understanding the Flowβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TR-069 PROVISIONING FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
PHASE 1: OLT Configures ONT via OMCI (Layer 2)
ββββββββββββββββ ββββββββββββββββ
β OLT βββββββββ OMCI Messages βββββββββ ONT β
β β (SetValue, GetValue, etc) β (CPE/ β
β - Profiles β β Modem) β
β - TR069 URL β β β
β - VLAN ID β β β
ββββββββββββββββ ββββββββββββββββ
β
ββ OMCI sets:
β ββ WAN service port VLAN
β ββ IP host config mode (DHCP)
β ββ TR069 ACS server URL
β ββ Connection request username
β
ββ ONT stores config and reboots
PHASE 2: ONT Boots and Connects to Management VLAN
ββββββββββββββββ
β ONT β
β - Boots up β
β - Gets VLAN β
β - Gets IP βββββ DHCP Request βββββ
β from DHCP β β
ββββββββββββββββ β
β β
ββββ Gets IP from DHCP Pool βββ
ββ Assigned IP: 10.20.0.50
ββ Gateway: 10.20.0.1
ββ DNS: 8.8.8.8
PHASE 3: ONT Contacts GenieACS Server (Layer 3)
ββββββββββββββββ ββββββββββββββββββββββββ
β ONT ββββββ TR-069 HTTP βββββ GenieACS Server β
β β (CWMP Protocol) β β
β - Initiates β β - Analyzes params β
β 1st hello β β - Applies rules β
β - Reports ββββββ XML Response ββββ - Sends config β
β parametersβ β β
ββββββββββββββββ ββββββββββββββββββββββββ
β β
ββ Sends: Device serial # ββ Stores in DB
ββ Sends: Software version ββ Updates cache
ββ Sends: Current parameters ββ Triggers hooks
ββ Requests: Config from ACS ββ Provisions new params
PHASE 4: GenieACS Provisions Parameters
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Parameter Provisioning β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β 1. WAN Configuration β
β ββ InternetGatewayDevice.WANDevice.1.WANCommonInterface β
β β .Enabled = 1 β
β ββ WANIPConnection.ConnectionType = "IP_Routed" β
β ββ WANIPConnection.AddressingType = "DHCP" β
β β
β 2. VLAN Settings β
β ββ .VAlanEnable = 1 β
β ββ .VAlanID = 100 (Data VLAN) β
β ββ .TPriority = 2 β
β β
β 3. LAN Configuration β
β ββ LANDevice.1.LANEthernetInterfaceConfig β
β ββ .Enable = 1 β
β ββ .Speed = "Auto" β
β β
β 4. WiFi (if supported) β
β ββ Radio.1.Enable = 1 β
β ββ SSID = "ISP_WIFI_" + Serial β
β ββ KeyPassphrase = GeneratedPassword β
β β
β 5. DNS/DHCP Settings β
β ββ LANDevice.1.DHCPServer.Enable = 1 β
β ββ DHCPServer.Pool.1.SubnetMask = "255.255.255.0" β
β ββ DHCPServer.Pool.1.MinAddress = "192.168.1.100" β
β ββ DHCPServer.Pool.1.MaxAddress = "192.168.1.200" β
β β
β 6. QoS / Bandwidth Limits β
β ββ TrafficScheduler.1.QueueWeight = 50 β
β ββ TrafficScheduler.2.QueueWeight = 30 β
β β
β 7. Firmware Update (if needed) β
β ββ SetParameterValues(Firmware) β
β ββ Upload triggers device reboot β
β ββ Version checked post-reboot β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Option A: Huawei OLT - Configure ONT via OMCIβ
Note: TR-069 and GenieACS provisioning require third-party applications and management systems to be truly effective. Standalone OLT provisioning via OMCI is just the foundation. For comprehensive provisioning with automatic scaling, user management, and service activation, you need a proper ACS (Auto Configuration Server) system like GenieACS.
# Connect to Huawei OLT (SSH/Telnet)
# Step 1: Configure ONT
config
olt 0
port 0/1/0
ont add 0 1 sn TESTONU00001234 type SFU desc "Test ONT"
# Step 2: Configure IP host (management VLAN 20)
config
interface ont0/1/0/1
ip-host 0 ipconfig dhcp vlan 20
# Step 3: Set TR069 parameters via OMCI
config
interface ont0/1/0/1
tr069-server-address http://192.168.1.50:7547/
tr069-server-username support
tr069-server-password support123
tr069-enable enable
# Step 4: Configure WAN interface (data VLAN 100)
config
service-port 0 1
port-mapping 0 1
wan-port 1 vlan-id 100 priority 2
# Step 5: Set service bandwidth (QoS)
config
service-port 0 1
qos-profile 1 name "Standard_10M"
cir 10M
pir 10M
# Step 6: Apply profile to ONT
config
interface ont0/1/0/1
qos-profile 1
# Step 7: Enable ONT
config
interface ont0/1/0/1
state enable
# Step 8: Reboot to apply OMCI config
admin reboot ont 0 1 1
Implementation Notes:
OLT provisioning via OMCI differs significantly between vendors in syntax and command structure. Each OLT manufacturer (VSOL, BSCom, Huawei, ZTE) uses their own CLI conventions, so adapt the commands above based on your specific OLT model's documentation.
Option B: GenieACS Server Configurationβ
GenieACS Installation and Setupβ
For complete GenieACS installation and deployment instructions, refer to the dedicated guide:
π GenieACS Auto-Installer and Deployment
This guide covers:
- Automated installation scripts
- Docker deployment
- Proxmox VM setup
- Post-installation configuration
- Service management and troubleshooting
Quick reference:
# After GenieACS is installed and running
# Access web UI: http://localhost:3000
# Default credentials: admin / admin
# Start services
sudo systemctl start genieacs
# Check status
sudo systemctl status genieacs
# View logs
sudo journalctl -u genieacs -f
GenieACS Configuration Fileβ
// /opt/genieacs/config/config.json
{
"cwmp": {
"port": 7547,
"ssl": false
},
"nbi": {
"port": 7548,
"ssl": false
},
"fs": {
"port": 7549,
"ssl": false
},
"mongodb": {
"url": "mongodb://localhost:27017/genieacs"
},
"redis": {
"url": "redis://localhost:6379"
}
}
GenieACS Device Configuration Templateβ
// Create device object in GenieACS
// Access device via serial number
// Device: TESTONU00001234
// Provision WAN parameters
declare("Device.WANDevice.1.WANCommonInterface.Enabled", {value: 1});
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Enable", {value: 1});
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ConnectionType", {value: "IP_Routed"});
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.AddressingType", {value: "DHCP"});
// Provision VLAN settings
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.VlanEnable", {value: 1});
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.VlanID", {value: 100});
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.VlanPriority", {value: 2});
// Provision LAN DHCP
declare("Device.LANDevice.1.LANEthernetInterfaceConfig.1.Enable", {value: 1});
declare("Device.LANDevice.1.DHCPServer.1.Enable", {value: 1});
declare("Device.LANDevice.1.DHCPServer.1.MinAddress", {value: "192.168.1.100"});
declare("Device.LANDevice.1.DHCPServer.1.MaxAddress", {value: "192.168.1.200"});
declare("Device.LANDevice.1.DHCPServer.1.SubnetMask", {value: "255.255.255.0"});
// Provision WiFi (if supported)
declare("Device.WiFi.Radio.1.Enable", {value: 1});
declare("Device.WiFi.SSID.1.SSID", {value: "ISP_WIFI_" + serialNumber});
declare("Device.WiFi.AccessPoint.1.Security.BeaconType", {value: "WPAand11i"});
declare("Device.WiFi.AccessPoint.1.Security.KeyPassphrase", {value: generatePassword()});
// Set DNS
declare("Device.LANDevice.1.DHCPServer.1.DNSServers", {value: "8.8.8.8,8.8.4.4"});
// Configure QoS if needed
declare("Device.QueueManagement.Queue.1.Interface", {value: "WANDevice.1.WANConnectionDevice.1.WANIPConnection.1"});
declare("Device.QueueManagement.Queue.1.QueueWeight", {value: 50});
Option C: Complete End-to-End Provisioningβ
MikroTik Router with GenieACS Integrationβ
# On MikroTik Router (management network)
# Step 1: Create management VLAN
/interface vlan add name=vlan_mgmt interface=ether1 vlan-id=20
# Step 2: Configure IP for management VLAN
/ip address add address=10.20.0.1/24 interface=vlan_mgmt
# Step 3: Create DHCP pool for ONT management
/ip pool add name=ont_mgmt_pool ranges=10.20.0.10-10.20.0.254
# Step 4: Create DHCP server for ONT management
/ip dhcp-server add name=ont_dhcp interface=vlan_mgmt address-pool=ont_mgmt_pool
# Step 5: Configure DHCP network
/ip dhcp-server network add address=10.20.0.0/24 gateway=10.20.0.1 \
dns-server=8.8.8.8,8.8.4.4
# Step 6: Deploy GenieACS server on router (optional, or use external server)
# If using external: Set firewall rules to allow traffic
/ip firewall nat add chain=dstnat protocol=tcp dst-port=7547 \
action=dst-nat to-address=192.168.1.50 to-port=7547
# Step 7: Monitor DHCP assignments
/ip dhcp-server lease print
# Step 8: Verify ONT connectivity to GenieACS
/log print where message~"genieacs"
π Understandingβ
What is TR-069?β
TR-069 (CPE WAN Management Protocol) is an industry standard (published by Broadcom) that enables:
- Remote management of Customer Premises Equipment (CPE)
- Auto-provisioning of device parameters
- Firmware updates
- Diagnostics and monitoring
- Software activation
Key characteristics:
- HTTP/HTTPS-based (XML protocol)
- Pull-based: Device initiates connection to ACS server
- Stateful: Server can provision parameters during connection
- Secure: Can use SSL/TLS and digest authentication
OMCI (ONT Management and Control Interface)β
OMCI is Layer 2 (Data Link layer) protocol used between OLT and ONT:
OSI Layer Mapping:
Layer 7: Application (TR-069, ICMP)
ββ
Layer 6-5: (Presentation, Session)
ββ
Layer 4: Transport (TCP, UDP)
ββ
Layer 3: Network (IP)
ββ
Layer 2: Data Link βββ OMCI operates here (between OLT and ONT)
ββ
Layer 1: Physical (Optical fiber)
OMCI Message Types:
| Message | Direction | Purpose |
|---|---|---|
| GetRequest | OLT β ONT | Query ONT managed objects |
| GetResponse | ONT β OLT | Return requested parameters |
| SetRequest | OLT β ONT | Set ONT parameters (VLAN, TR069 URL, etc) |
| SetResponse | ONT β OLT | Confirm parameter change |
| CreateRequest | OLT β ONT | Create new managed object instance |
| CreateResponse | ONT β OLT | Confirm object creation |
| RebootRequest | OLT β ONT | Trigger ONT reboot |
| RebootResponse | ONT β OLT | Confirm reboot initiated |
Example OMCI Flow:
OLT ONT
β
ββ GetRequest (Get TR069 Server URL) ββββββββ β
β β
β βββββ GetResponse (Current URL is empty)ββββ€
β
ββ SetRequest (Set TR069 URL to 192.168.1.50:7547) βββ β
β β
β βββββββ SetResponse (Success) βββββββββββββββββββββ€
β
ββ RebootRequest ββββββββββββββββββββββββββββββββββββ β
β β
β βββββ RebootResponse (Rebooting...) βββββββββββββ€
β β
β [ONT Reboots]
β [Connects to VLAN 20]
β [Gets IP from DHCP]
β [Contacts GenieACS]
TR-069 Connection Sequenceβ
Step 1: ONT Boot
ββ DHCP discovers management VLAN (20)
ββ Gets IP address (10.20.0.50)
ββ Gets gateway (10.20.0.1) and DNS (8.8.8.8)
ββ Stores TR069 ACS URL from OMCI config (http://192.168.1.50:7547)
Step 2: First Connection ("Inform")
ββ ONT initiates HTTP connection to ACS server
ββ Sends XML: Device info, serial #, software version
ββ Sends: Current parameter values
ββ GenieACS receives and logs in database
Step 3: GenieACS Analyzes & Provisions
ββ Queries device profile in database
ββ Checks if parameters need update
ββ Generates XML response with new values
ββ Sends "ParameterValues" object
Step 4: ONT Receives Parameters
ββ Reads XML response from ACS
ββ Validates parameter changes
ββ Updates internal configuration
ββ Sends back confirmation ("EmptyHttp")
ββ Disconnects from ACS
Step 5: Periodic Inform (Optional)
ββ ONT connects to ACS every 24 hours (default)
ββ Sends new inform with current state
ββ ACS provisions any new parameters
ββ Loop repeats
Device Parameter Treeβ
TR-069 uses hierarchical parameter naming:
Device (root)
βββ DeviceInfo
β βββ Manufacturer = "VENDOR_NAME"
β βββ ModelName = "MODEL_X"
β βββ SerialNumber = "TESTONU00001234"
β βββ SoftwareVersion = "v2.1.3"
β βββ HardwareVersion = "v1.0"
β
βββ WANDevice
β βββ 1
β βββ WANCommonInterface
β β βββ Enabled = 1
β β
β βββ WANConnectionDevice
β βββ 1
β βββ WANIPConnection
β β βββ Enable = 1
β β βββ AddressingType = "DHCP"
β β βββ ExternalIPAddress = "203.0.113.50"
β β βββ VlanEnable = 1
β β βββ VlanID = 100
β β βββ VlanPriority = 2
β β
β βββ WANEthernetLinkConfig
β βββ EthernetLinkStatus = "Up"
β βββ MaxBitRate = "1000"
β
βββ LANDevice
β βββ 1
β βββ LANEthernetInterfaceConfig
β β βββ 1
β β β βββ Enable = 1
β β β βββ Status = "Up"
β β β βββ MACAddress = "00:11:22:33:44:55"
β β β βββ MaxBitRate = "1000"
β β β
β β βββ 2
β β βββ Enable = 1
β β βββ MaxBitRate = "1000"
β β
β βββ DHCPServer
β βββ Enable = 1
β βββ Pool
β βββ 1
β βββ Enable = 1
β βββ SubnetMask = "255.255.255.0"
β βββ MinAddress = "192.168.1.100"
β βββ MaxAddress = "192.168.1.200"
β βββ LeaseTime = 3600
β
βββ WiFi (if supported)
β βββ Radio
β β βββ 1
β β βββ Enable = 1
β β βββ Frequency = "2.4GHz"
β β βββ Channel = "Auto"
β β βββ TransmitPower = 100
β β
β βββ SSID
β βββ 1
β βββ SSID = "ISP_WiFi_Test123"
β βββ AccessPoint
β βββ 1
β βββ SSIDReference = "Device.WiFi.SSID.1"
β βββ Security
β βββ BeaconType = "WPAand11i"
β βββ KeyPassphrase = "encrypted_password"
β
βββ Management
βββ TraceLevel = 0
βββ SerialNumberMatching = 0
GenieACS Architectureβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β GenieACS Stack β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β NBI (North Bound Interface) - Port 7548 β β
β β REST API for management and querying β β
β β - Access devices β β
β β - Create tasks β β
β β - Query parameters β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Core Engine - Port 7547 (CWMP) β β
β β Handles device connections β β
β β - Parse XML from CPE β β
β β - Apply provisioning rules β β
β β - Generate responses β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β File Server - Port 7549 β β
β β Serves firmware files for upgrades β β
β β - Firmware binaries β β
β β - Configuration files β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Database Layer β β
β β βββββββββββββββ βββββββββββββββ β β
β β β MongoDB β β Redis β β β
β β β (persistent) β (cache) β β β
β β βββββββββββββββ βββββββββββββββ β β
β β - Device profiles - Session data β β
β β - Parameters - Queued tasks β β
β β - Events logs - Temporary states β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βοΈ Verificationβ
1. Verify OMCI Communication (OLT side)β
# Check ONT connection status on OLT
show interface gpon 0/1/0:1 # ONT 1 status
# Expected output:
# ONT 1: Online
# ββ Serial: TESTONU00001234
# ββ Vendor ID: VSOL
# ββ TR069 Status: Enabled
# ββ TR069 URL: http://192.168.1.50:7547
# ββ Last contact: 2m ago
2. Verify ONT Received OMCI Configβ
# On ONT (if accessible via SSH)
# Check TR069 settings
cat /proc/tr069/config
# Expected output:
# TR069_ENABLE=1
# TR069_URL=http://192.168.1.50:7547
# TR069_USERNAME=support
# TR069_PASSWORD=support123
# MGMT_VLAN=20
# DATA_VLAN=100
3. Check DHCP Lease Assignmentβ
# On management router
/ip dhcp-server lease print
# Expected output:
# ID ADDRESS MAC-ADDRESS HOSTNAME EXPIRES-AFTER
# 0 10.20.0.50 00:11:22:33:44:55 ONT_1234 23h59m12s
4. Verify ONT β GenieACS Connectionβ
# On GenieACS server
tail -f /var/log/genieacs/core.log
# Expected output:
[2026-02-01 14:35:22] Inform from TESTONU00001234
[2026-02-01 14:35:23] SetParameterValues for Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.VlanID
[2026-02-01 14:35:24] Device reboot triggered
[2026-02-01 14:35:45] TESTONU00001234 came back online
5. Check GenieACS Databaseβ
// Query MongoDB for device
db.devices.findOne({_id: "TESTONU00001234"})
// Expected output (partial):
{
"_id": "TESTONU00001234",
"channels": {
"default": {
"port": 7547,
"interface": "0.0.0.0"
}
},
"parameters": [
"Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.VlanID = 100",
"Device.LANDevice.1.DHCPServer.1.Enable = 1"
],
"lastInform": new Date("2026-02-01T14:35:22.000Z"),
"lastOnlineTime": new Date("2026-02-01T14:35:45.000Z")
}
6. Test TR-069 HTTP Connectionβ
# From router, test connectivity to GenieACS
curl -v http://192.168.1.50:7547/
# Expected output:
> GET / HTTP/1.1
< HTTP/1.1 405 Method Not Allowed
# 405 error is expected (TR069 uses POST, not GET)
π§ Troubleshootingβ
| Issue | Cause | Solution |
|---|---|---|
| ONT doesn't boot | No OMCI communication | Check OLT-ONT optical connection, reseat fiber |
| ONT boots but no management IP | VLAN 20 not configured | Use OMCI to set management VLAN again |
| No connection to GenieACS | Firewall blocking port 7547 | Open TCP 7547 in firewall: /ip firewall rule add chain=input protocol=tcp dst-port=7547 action=accept |
| OnT can't reach GenieACS | Wrong ACS URL in OMCI | Re-configure OMCI URL, trigger ONT reboot |
| GenieACS not provisioning | Device not in database | Add device profile to GenieACS via NBI |
| TR069 connection timeout | Network latency | Increase timeout in GenieACS config from 30s to 60s |
| Firmware update fails | Device runs out of memory | Reboot ONT before update, reduce config complexity |
| Duplicate device entries | Reboot during connection | Implement idempotent provisioning in GenieACS |
| VLAN tag not applied | ONT rebooted too early | Wait 30s after OMCI config before reboot |
βοΈ Advanced Optionsβ
1. Bulk Provisioning Script for GenieACSβ
// Bulk provision multiple ONTs with different speeds
const devices = [
{serial: "TESTONU00001234", tier: "basic", download: "10M", upload: "5M"},
{serial: "TESTONU00005678", tier: "premium", download: "50M", upload: "20M"},
{serial: "TESTONU00009999", tier: "enterprise", download: "100M", upload: "50M"}
];
devices.forEach(device => {
// Create device profile
const deviceId = device.serial;
// Set WAN parameters
declare("Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.Enable", {value: 1});
// Set tier-based bandwidth (via shaping)
declare("Device.QueueManagement.Queue.1.Rate", {value: device.download});
declare("Device.QueueManagement.Queue.2.Rate", {value: device.upload});
// Set custom SSID for each device
declare("Device.WiFi.SSID.1.SSID", {value: "ISP_" + device.tier + "_" + device.serial});
// Log provisioning
console.log(`Provisioned ${device.serial} as ${device.tier} tier`);
});
2. OMCI Multi-Service Provisioningβ
# Configure multiple VLANs on single ONT via OMCI
# Service 1: Internet (VLAN 100)
ontservice add 0 1 1 vlan-id 100 priority 2 type internet
# Service 2: IPTV (VLAN 101)
ontservice add 0 1 2 vlan-id 101 priority 3 type iptv
# Service 3: Voice (VLAN 102)
ontservice add 0 1 3 vlan-id 102 priority 4 type voice
# Service 4: Management (VLAN 20) - already configured
# (Configured during TR069 setup)
# Each service can have different bandwidth limits
ontservice qos 0 1 1 rate-limit 100M # Internet: 100 Mbps
ontservice qos 0 1 2 rate-limit 50M # IPTV: 50 Mbps
ontservice qos 0 1 3 rate-limit 10M # Voice: 10 Mbps
3. Automatic Firmware Update via TR-069β
// GenieACS provision firmware update for specific device class
declare("Device.DeviceInfo.SoftwareVersion", {value: "v2.1.3"});
// Task: Download and install firmware
if (parameter("Device.DeviceInfo.SoftwareVersion").value === "v2.0.0") {
// Device has old firmware, push update
declare("Device.ManagementServer.DownloadProgressURL",
{value: "http://192.168.1.50:7549/firmware/TESTONU_v2.1.3.bin"});
// Set reboot time for 2 AM (off-peak)
declare("Device.ManagementServer.PeriodicInformInterval", {value: 3600});
declare("Device.ManagementServer.PeriodicInformTime", {value: "2023-01-01T02:00:00Z"});
}
4. Real-Time Parameter Monitoringβ
# Monitor device parameter changes in real-time
# (GenieACS webhook to HTTP server)
# Trigger on parameter change:
# When Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress changes
# Send webhook to: http://192.168.1.10:8080/webhook
curl -X POST http://192.168.1.10:8080/webhook \
-H "Content-Type: application/json" \
-d '{
"device": "TESTONU00001234",
"parameter": "Device.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress",
"oldValue": "0.0.0.0",
"newValue": "203.0.113.50",
"timestamp": "2026-02-01T14:35:22Z"
}'
5. GenieACS Housekeeping Scriptβ
#!/bin/bash
# Cleanup old logs and device records
# Remove devices offline for > 90 days
mongo genieacs --eval "
db.devices.deleteMany({
lastOnlineTime: {
\$lt: new Date(new Date().getTime() - 90*24*60*60*1000)
}
})
"
# Trim logs to last 30 days
mongo genieacs --eval "
db.logs.deleteMany({
_id: {
\$lt: new Date(new Date().getTime() - 30*24*60*60*1000)
}
})
"
# Rebuild MongoDB indexes
mongo genieacs --eval "
db.devices.reIndex()
db.logs.reIndex()
db.events.reIndex()
"
echo "GenieACS housekeeping completed"
6. Custom TR-069 Parametersβ
// Define custom vendor-specific parameters
declare("Device.Services.VoiceService.1.VoiceProfile.1.Enable", {value: 1});
declare("Device.Services.VoiceService.1.VoiceProfile.1.Name", {value: "VoIP_Profile"});
declare("Device.Services.VoiceService.1.VoiceProfile.1.SignalingProtocol", {value: "SIP"});
// Custom ISP parameters
declare("Device.X_ISP.BillingTier", {value: "premium"});
declare("Device.X_ISP.CustomerID", {value: "CUST_12345"});
declare("Device.X_ISP.ExpiryDate", {value: "2027-02-01"});
// These appear in device XML when ONT connects
7. GenieACS Cluster Setup (HA)β
# Setup multi-node GenieACS with load balancing
# Node 1 (Master)
hostname genieacs-1
apt install genieacs
cp config.json /opt/genieacs/
npm start
# Node 2 (Replica)
hostname genieacs-2
apt install genieacs
cp config.json /opt/genieacs/
npm start
# MongoDB Replica Set (for HA)
mongo --eval "
rs.initiate({
_id: 'rs0',
members: [
{_id: 0, host: '192.168.1.51:27017'},
{_id: 1, host: '192.168.1.52:27017'},
{_id: 2, host: '192.168.1.53:27017', arbiterOnly: true}
]
})
"
# Nginx Load Balancer (frontend)
upstream genieacs {
server 192.168.1.50:7547;
server 192.168.1.51:7547;
}
server {
listen 7547;
location / {
proxy_pass http://genieacs;
}
}
π Related Guidesβ
- IPoE Server Setup and Management β Always-on broadband connectivity
- VLAN Configuration β Network segmentation and tagging
- GenieACS Auto-Installer β Automated GenieACS deployment
- GPON VLAN Configuration β Optical line terminal setup
- EPON VLAN Configuration β EPON optical setup
- DHCP Server Configuration β Dynamic IP assignment (coming soon)
- RADIUS Authentication Setup β Centralized authentication (coming soon)
- Bandwidth Limiting per User β QoS and traffic control (coming soon)
β TR-069 and GenieACS provisioning configured successfully! Your ONTs are now automatically provisioned from the OLT via OMCI, connected to GenieACS, and receiving remote configuration for optimal broadband delivery.