Just Plug and Play
Next Generation Piso Wifi Business
v4.0 · Online
Powered by ICTbizwifi+
Command Center
{{ greeting }}, {{ user.fullName }}
Admins
{{ stats.admins?.active||0 }}/{{ stats.admins?.total||0 }}
APs Online
{{ monHealth.onlineRouters??stats.routers?.online??0 }}/{{ monHealth.totalRouters??stats.routers?.total??0 }}
Sessions
{{ monHealth.activeSessions??stats.sessions?.active??0 }}
DB Ping
{{ monHealth.dbPingMs??'--' }}ms
{{ stats.admins?.total||0 }}
{{ stats.admins?.active||0 }} active
{{ monHealth.onlineRouters??0 }}/{{ monHealth.totalRouters??0 }}
Omada live
{{ monHealth.activeSessions??0 }}
active now
{{ monSystem.cpu?.usagePercent??'--' }}%
{{ monSystem.cpu?.count||'-' }} core
{{ monSystem.memory?.usedPercent??'--' }}%
{{ monSystem.memory?monSystem.memory.usedMB+'/'+monSystem.memory.totalMB+' MB':'-' }}
{{ monSystem.disk?.usedPercent??'--' }}%
{{ monSystem.disk?monSystem.disk.usedGB+'/'+monSystem.disk.totalGB+' GB':'-' }}
{{ stats.vouchers?.total||0 }}
Total
{{ stats.vouchers?.unused||0 }}
Unused
{{ stats.vouchers?.active||0 }}
Active
{{ (stats.vouchers?.total||0)-(stats.vouchers?.unused||0)-(stats.vouchers?.active||0) }}
Used
Delete old used/expired vouchers and their sessions to free up database space.
{{ cleanupPreview.vouchers }}
Vouchers to delete
{{ cleanupPreview.sessions }}
Sessions to clean
Oldest: {{ cleanupPreview.oldestDate }}
Nothing to clean up
{{ a.description }}
{{ a.admin_name }}
{{ formatAgo(a.created_at) }}
No activity yet
{{ greeting }}
{{ assistAdmin ? assistAdmin.full_name : user.fullName }}
Total Revenue
₱{{ salesTotalRevenue }}
APs Online
{{ stats.routers?.online||0 }}/{{ stats.routers?.total||0 }}
Active
{{ stats.sessions?.active||0 }}
Vouchers
{{ stats.vouchers?.unused||0 }}
No sales yet
Generate vouchers and start selling!
{{ stats.sessions?.active||0 }}
APs Online
{{ stats.routers?.online||0 }}
Active
{{ stats.sessions?.active||0 }}
Vouchers
{{ stats.vouchers?.unused||0 }}
Admins
{{ stats.admins?.total||0 }}
APs Total
{{ stats.routers?.total||0 }}
Vouchers
{{ stats.vouchers?.total||0 }}
Sessions
{{ stats.sessions?.active||0 }}
{{ a.description }}
{{ a.admin_name }}
{{ formatAgo(a.created_at) }}
{{ formatDateTime(a.created_at) }}
No activity yet
Actions will appear here in real-time
{{ r.model || 'Unknown Model' }}
{{ r.mac_address || r.serial_number }}
Announced {{ formatAgo(r.last_heartbeat || r.created_at) }}
{{ a.full_name }}
{{ a.email }}
{{ a.omada_site_id }}
No site
WiFi Network (SSID)
{{ wifiSSIDName || 'Loading...' }}
Your customers see this name when connecting. All APs on your site broadcast this SSID.
No Access Points Found
APs will appear here once adopted on your Omada site
{{ ap.name || ap.mac }}
ONLINE PROVISIONING PENDING OFFLINE{{ ap.mac }}
{{ ap.showModel || ap.model || 'Unknown' }} · IP: {{ ap.ip || '—' }}
Clients
{{ ap.clientNum || 0 }}
Uptime
{{ ap.uptime || '—' }}
CPU
{{ ap.cpuUtil || 0 }}%
Memory
{{ ap.memUtil || 0 }}%
Omada Controller
Sites Management
All sites configured on the Omada SDN Controller
{{ omadaSitesList.length }}
Total Sites
{{ omadaSitesList.filter(s=>s.wlanDeviceConnectedNum>0).length }}
With APs
{{ omadaSitesList.reduce((a,s)=>a+(s.wlanGuestNum||0),0) }}
Total Clients
{{ site.name }}
{{ site.scenario || 'Default' }} · {{ site.region || '—' }} · {{ site.controllerName }}
APs Online
{{ site.wlanDeviceConnectedNum || 0 }}
APs Offline
{{ site.wlanDeviceDisconnectedNum || 0 }}
Clients
{{ site.wlanUserNum || 0 }}
Guests
{{ site.wlanGuestNum || 0 }}
Site AP Management
{{ selectedSite.name }}
{{ selectedSite.scenario || 'Default' }} · {{ selectedSite.region || '—' }}
{{ ap.name || ap.mac }}
{{ ap.showModel || ap.model || 'Unknown' }} · {{ ap.ip || '—' }}
{{ ap.mac }}
{{ ap.assignedAdmin.full_name }}
{{ ap.assignedAdmin.email }}
No APs found on this site
Vouchers
Manage Codes
Generate, print, and track voucher batches
Total
{{ batchSummary.total }}
Unused
{{ batchSummary.unused }}
Used
{{ batchSummary.used }}
Total Amount
₱{{ batchSummary.totalAmount.toLocaleString('en',{minimumFractionDigits:0,maximumFractionDigits:0}) }}
Unused
₱{{ (batchSummary.totalAmount - batchSummary.usedAmount).toLocaleString('en',{minimumFractionDigits:0,maximumFractionDigits:0}) }}
Used
₱{{ batchSummary.usedAmount.toLocaleString('en',{minimumFractionDigits:0,maximumFractionDigits:0}) }}
Matching Batches ({{ filteredBatches.length }})
{{ b.batch_name || formatDuration(b.duration_minutes)+' Plan' }}
{{ formatBatchDate(b.created_at) }} · ₱{{ Number(b.price||0).toFixed(2) }}
Matching Codes ({{ vouchers.length }})
{{ b.batch_name || formatDuration(b.duration_minutes)+' Plan' }}
{{ formatBatchDate(b.created_at) }}
₱{{ Number(b.price).toFixed(2) }}
per voucher
Duration
{{ formatDuration(b.duration_minutes) }}
Validity
{{ formatValidity(b.validity_hours, b.duration_minutes, b.voucher_type) }}
Speed Limit
{{ b.speed_down||5 }} {{ b.speed_up||2 }} Mbps
Total / Sales
₱{{ (b.count * Number(b.price||0)).toLocaleString('en',{minimumFractionDigits:2}) }}
Sold: ₱{{ (((b.active||0)+(b.expired||0)+(b.revoked||0)) * Number(b.price||0)).toLocaleString('en',{minimumFractionDigits:2}) }} ({{ (b.active||0)+(b.expired||0)+(b.revoked||0) }})
{{ voucherBatches.length }} Batches
{{ b.batch_name || formatDuration(b.duration_minutes)+' Plan' }}
No vouchers found
Voucher Batch
{{ vouchers[0].batch_name || formatDuration(vouchers[0].duration_minutes)+' Plan' }}
Created {{ formatBatchDate(vouchers[0].created_at) }}
Price
₱{{ Number(vouchers[0].price||0).toFixed(0) }}
Duration
{{ formatDuration(vouchers[0].duration_minutes) }}
Validity
{{ formatValidity(vouchers[0].validity_hours, vouchers[0].duration_minutes, vouchers[0].voucher_type) }}
Download
{{ vouchers[0].speed_limit_down }}Mbps
Upload
{{ vouchers[0].speed_limit_up }}Mbps
{{ vouchers.length }} Voucher{{ vouchers.length!==1?'s':'' }}
{{ v.code }}
No vouchers found
Try a different filter or search term
Connected Devices
{{ omadaClients.length }} total
Live view of clients on your WiFi network
Active
{{ omadaClients.filter(c=>c.active).length }}
Guest
{{ omadaClients.filter(c=>c.guest).length }}
Total
{{ omadaClients.length }}
{{ client.name || client.hostName || (client.session && client.session.deviceName) || 'Unknown Device' }}
{{ client.vendor || client.osName || (client.session && client.session.deviceType) || client.mac }} · {{ client.ip }}
Coin Wallet
₱{{ Number(client.walletBalance || 0).toFixed(2) }}
Device ID
{{ client.walletUid }}
Total loaded ₱{{ Number(client.walletTotalLoaded).toFixed(0) }}
{{ formatTimeCompact(client.session.remainingSeconds) }}
Remaining
{{ client.session.voucherCode || '---' }}
Voucher
{{ client.session.speedDown || '?' }}Mbps
Speed
Last Seen
{{ client.lastSeen ? formatAgo(client.lastSeen) : '---' }}
Down
{{ client.connectionStatus==='pending'||client.connectionStatus==='offline' ? '0 B' : formatBytes(client.download||client.trafficDown||0) }}
Up
{{ client.connectionStatus==='pending'||client.connectionStatus==='offline' ? '0 B' : formatBytes(client.upload||client.trafficUp||0) }}
SSID
{{ client.ssid || (client.session && client.session.ssidName) || '---' }}
No connected devices
Devices will appear here once they join your WiFi
{{ deviceHistoryMac }}
Usage history — newest first
{{ h.is_wallet?h.description:((h.source_type==='coin'||h.source_type==='coin_wallet')?(h.plan_name||'₱'+h.coin_amount):(h.source_type==='credit'?(h.plan_name||'Credit'):h.voucher_code||'—')) }}
{{ formatDate(h.started_at) }}
Balance: ₱{{ Number(h.balance_after).toFixed(2) }}
{{ h.session_status }}-₱{{ Math.abs(Number(h.wallet_amount_deducted)).toFixed(2) }}
₱{{ Number(h.price).toFixed(2) }}
Balance: ₱{{ Number(h.wallet_balance_after).toFixed(2) }}
No usage history found
Rate Plans
Pricing Tiers
Configure WiFi access plans and speed limits
Price
₱{{ Number(rp.price).toFixed(0) }}
Omada SDN
Controllers
Manage multiple Omada SDN controllers
No controllers registered
Add an Omada SDN controller to get started
{{ c.name }}
{{ c.url }}
License Keys
Key Management
Generate & distribute license keys to admins
{{ k.code }}
Created {{ formatAgo(k.created_at) }} · Activated {{ formatAgo(k.activated_at) }}
Expires {{ formatDate(k.expires_at) }}
{{ licenseSearch ? 'No keys matching "'+licenseSearch+'"' : 'No license keys yet. Generate some above.' }}
{{ ap.name || ap.mac }}
{{ ap.mac }}
{{ Math.ceil((new Date(ap.licenseExpiresAt)-new Date())/86400000) }}d left
exp. {{ formatDate(ap.licenseExpiresAt) }}
Expired{{ k.code }}
{{ k.router_name || k.omada_ap_mac || '—' }} · {{ k.duration_months }}mo
{{ formatAgo(k.activated_at) }}
Session Management
Pause Detector
Live monitoring {{ pdSocketConnected ? 'Connected' : 'Offline' }}
Status
{{ pdStats.isRunning ? 'Running' : 'Idle' }}
interval {{ Math.round((pdStats.pollIntervalMs||0)/1000) }}s · conc {{ pdStats.concurrency||0 }}
Last Run
{{ pdStats.lastRunAt ? formatLastSeen(pdStats.lastRunAt) : 'never' }}
{{ pdStats.lastRunDurationMs||0 }}ms · {{ pdStats.lastRunSitesChecked||0 }} sites · {{ pdStats.lastRunSessionsChecked||0 }} sess
Currently Paused
{{ pdStats.currentlyPausedCount != null ? pdStats.currentlyPausedCount : pdPausedSessions.length }}
+{{ pdStats.totalPaused || 0 }} since restart
Currently Resumed
{{ pdStats.currentlyResumedCount || 0 }}
+{{ pdStats.totalResumed || 0 }} since restart
Expired
{{ pdStats.totalExpired || 0 }}
since restart · Total runs: {{ pdStats.totalRuns || 0 }}
Currently Paused
{{ pdPausedSessions.length }}No paused sessions
{{ s.client_mac }}
{{ formatTimeCompact(s.remaining_seconds) }} leftpaused {{ formatLastSeen(s.paused_at) }}
Recent Events
System Monitor
{{ monSystem.cpu ? monSystem.cpu.usagePercent + '%' : '--' }}
{{ monSystem.cpu?.count || '-' }} core
{{ monSystem.memory ? monSystem.memory.usedPercent + '%' : '--' }}
{{ monSystem.memory ? monSystem.memory.usedMB + '/' + monSystem.memory.totalMB + ' MB' : '-' }}
{{ monSystem.disk ? monSystem.disk.usedPercent + '%' : '--' }}
{{ monSystem.disk ? monSystem.disk.usedGB + '/' + monSystem.disk.totalGB + ' GB' : '-' }}
{{ monSystem.uptime ? formatUptime(monSystem.uptime) : '--' }}
VPS
{{ monHealth.activeSessions ?? '--' }}
active now
{{ monHealth.onlineRouters ?? '--' }}/{{ monHealth.totalRouters ?? '-' }}
online
API Traffic
Session Timeline
API Error Log ({{ monErrorTotal }})
{{ e.method }} {{ e.path }}
Rate Limit Hits
Health
Documentation
Step-by-step guide on how to use the system
Quick Navigation
Your dashboard shows a real-time overview of your business:
Total Revenue — Your total earnings from voucher sales. Use the Daily / Weekly / Monthly toggle to view different periods.
Sales Chart — Visual chart showing your revenue trend over time.
Live Status — Shows APs online, active sessions (connected devices), and available vouchers.
Recent Activity — Live feed of voucher usage, sessions, and system events.
This page shows your WiFi access points (APs) managed through the Omada controller.
Online / Offline — Green dot means AP is powered on and connected. Gray means offline.
License — Each AP needs an active license. Tap an AP to view license status and expiry date.
SSID — The WiFi network name that customers see. You can update it from this page.
If your AP shows offline, check if it's powered on and connected to the internet. Contact support if the issue persists.
Vouchers are codes that customers enter to connect to your WiFi. Each voucher has a set duration and speed.
How to Generate Vouchers
Step 1: Go to the Vouchers page and tap "Generate"
Step 2: Set the quantity (how many codes to create)
Step 3: Set download/upload speed limits
Step 4: Set the usage duration (e.g. 1 hour, 3 hours, 1 day)
Step 5: Choose validity type:
Continuous — Timer runs even when device disconnects. Best for time-limited access.
With Pause — Timer only runs when connected. Customers can disconnect and reconnect later within the validity period.
Step 6: Tap "Generate" to create the voucher codes
Voucher Statuses
Unused — Ready to be sold. Code hasn't been entered yet.
Active — Customer is currently using this voucher.
Used — Time has expired. Voucher is fully consumed.
Revoked — Manually disabled by admin.
Batch Management
View Batch — See all voucher codes in a batch with their status
Print Batch — Print all unused vouchers in the batch (works with thermal printers)
Delete Batch — Remove entire batch (disconnects active sessions first)
Shows all devices currently connected to your WiFi network.
Connected Devices — Shows device name, MAC address, IP, which AP they're connected to, and remaining time.
Kick Device — Disconnect a device immediately. Their session will be paused (if pause type) or continue counting (if continuous).
Device History — Tap a device to see all its past sessions, vouchers used, and connection history.
Rate plans define your pricing tiers — the packages displayed on your captive portal and used when generating vouchers.
Step 1: Tap "Add Rate Plan"
Step 2: Set a name (e.g. "1 Hour Surf", "All Day Pass")
Step 3: Set the price in PHP
Step 4: Set duration, speed limits, and validity type
Step 5: Tap "Save"
Rate plans appear on the customer portal when "Show Rate Plans" is enabled in Portal settings. Customers can see pricing before purchasing.
Customize the captive portal — the page customers see when they connect to your WiFi.
Template — Choose from Business, Cafe, Resort, Gaming, or Minimal themes. Each has different colors and styling.
Customize — Change portal name, welcome message, terms of service, and toggle rate plan display.
Live Preview — See how your portal looks in real-time as you make changes.
Don't forget to tap "Save & Publish" after making changes. Changes won't appear on the live portal until published.
Each AP requires an active license to accept voucher connections.
Step 1: Get a license key from your provider (format: ICTBIZ-XXXXXX)
Step 2: Go to the Licenses page
Step 3: Tap "Activate License"
Step 4: Enter the license code and your AP's MAC address
Step 5: Tap "Activate"
License duration is typically 12 or 24 months. The system will show a warning when your license is about to expire.
The Printer Station is a separate app for quick voucher printing, ideal for POS (point of sale) use with a thermal printer.
Access: Visit printer.ictcloud.network or tap the printer icon in your admin panel
Step 1: Log in with your admin credentials
Step 2: Tap a rate plan card on the Home page
Step 3: Set quantity (1-30 vouchers per batch)
Step 4: Tap "Generate & Print"
Step 5: The voucher cards will appear — tap "Print Now" to send to your thermal printer (57mm)
For best results, use a 57mm thermal receipt printer. The voucher cards are optimized for this paper width.
What happens when a voucher expires?
The customer is automatically disconnected. For continuous vouchers, the timer runs out. For pause vouchers, the validity period expires even if unused time remains.
Can a customer use the same voucher on multiple devices?
By default, each voucher allows 1 device. You can increase this when creating rate plans (Max Devices setting).
Can I use a voucher from another admin's network?
No. Each voucher is tied to the admin who created it. It only works on that admin's AP/router.
My AP shows offline. What should I do?
Check if the AP is powered on and has internet connection. Ensure the AP is adopted in the Omada controller. Contact your provider if the issue persists.
How do I reset my password?
Tap your profile avatar (top-right corner), then tap "Update Password". Enter your current password and the new one.
Need Help?
Contact your system provider for technical support.
Portal Design
Choose Template
Select a base then customize colors, text, and images
{{ t.name }}
{{ t.desc }}
Show Rate Plans
Display available packages on the portal page
{{ portalForm.welcome_text || 'Enter your voucher code to connect' }}
{{ portalForm.terms_text.substring(0,80) }}...
Hardware
Coinslots
{{ coinslots.length }} device{{ coinslots.length !== 1 ? 's' : '' }} bound to your account
How to add a coinslot
BizWifi-Coinslot-XXXXhttp://192.168.4.1No coinslots bound
Follow the steps above to add your first coinslot
{{ cs.mac_address }}
{{ cs.wifi_ssid_connected || cs.mac_address }}BACKUP
{{ coinslotApSsid(cs.mac_address) }}
{{ cs.status==='online' ? 'Online' : 'Offline' }}Coins
{{ cs.coins_total || 0 }}
{{ assignAPsModal.coinslot && assignAPsModal.coinslot.name || '' }}
Choose which APs can use this coinslot. Customers will only see this slot in the portal when they're connected to an allowed AP.
You have no APs added yet
Your APs ({{ assignAPsModal.routers.length }})
No APs selected — coinslot will be unavailable until you pick at least one.
{{ confirmDialog.message }}
Your session has expired due to inactivity or token expiration. Please sign in again to continue.
Processing...