Skip to content

Instantly share code, notes, and snippets.

@tpoechtrager
Last active June 2, 2025 01:47
Show Gist options
  • Save tpoechtrager/766140c49a711a2177820ea42556de3c to your computer and use it in GitHub Desktop.
Save tpoechtrager/766140c49a711a2177820ea42556de3c to your computer and use it in GitHub Desktop.
/*
*
* Original code by Miononno
* https://www.youtube.com/watch?v=1kanq1w2DA0
*
* Enhanced by unknown @ lteforum.at
*
*/
console.log("Loading ZTE Script v" + "2025-04-17-#1");
siginfo =
"wan_active_band,wan_active_channel,wan_lte_ca,wan_apn,wan_ipaddr," +
"cell_id,dns_mode,prefer_dns_manual,standby_dns_manual,network_type," +
"network_provider_fullname," +
"rmcc,rmnc," +
"ip_passthrough_enabled," +
"bandwidth," +
"tx_power," +
"rscp_1,ecio_1,rscp_2,ecio_2,rscp_3,ecio_3,rscp_4,ecio_4," +
"ngbr_cell_info," +
"lte_multi_ca_scell_info,lte_multi_ca_scell_sig_info," +
"lte_band,lte_rsrp,lte_rsrq," +
"lte_rsrq,lte_rssi,lte_rsrp,lte_snr," +
"lte_ca_pcell_band,lte_ca_pcell_freq,lte_ca_pcell_bandwidth," +
"lte_ca_scell_band,lte_ca_scell_bandwidth," +
"lte_rsrp_1,lte_rsrp_2,lte_rsrp_3,lte_rsrp_4," +
"lte_snr_1,lte_snr_2,lte_snr_3,lte_snr_4," +
"lte_pci,lte_pci_lock,lte_earfcn_lock," +
"5g_rx0_rsrp,5g_rx1_rsrp,Z5g_rsrp,Z5g_rsrq,Z5g_SINR," +
"nr5g_cell_id,nr5g_pci," +
"nr5g_action_channel,nr5g_action_band," +
"nr5g_action_nsa_band," +
"nr_ca_pcell_band,nr_ca_pcell_freq," +
"nr_multi_ca_scell_info," +
"nr5g_sa_band_lock,nr5g_nsa_band_lock," +
"pm_sensor_ambient,pm_sensor_mdm,pm_sensor_5g,pm_sensor_pa1,wifi_chip_temp";
is_mc888 = false;
is_mc889 = false;
logged_in_as_developer = false;
function dump_variable(v)
{
for (property in v)
{
try
{
console.log(property + ":" + JSON.stringify(v[property]));
}
catch { }
}
}
function var2html(prefix, v)
{
for (index in v)
{
var items = v[index];
for (item_index in items)
$("#" + prefix + "_" + index + "_" + item_index).html(items[item_index]);
}
}
function test_cmd(cmd)
{
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: cmd,
multi_data: "1"
},
dataType: "json",
success: function(a)
{
console.log(a);
}
});
}
// https://stackoverflow.com/a/68009748/1392778
window.cookies = window.cookies ||
{
// https://stackoverflow.com/a/25490531/1028230
get: function(name)
{
var b = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
return b ? b.pop() : null;
},
delete: function(name)
{
document.cookie = '{0}=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'
.replace('{0}', name);
},
set: function(name, value)
{
document.cookie =
'{0}={1};expires=Fri, 31 Dec 9999 23:59:59 GMT;path=/;SameSite=Lax'
.replace('{0}', name)
.replace('{1}', value);
}
};
function show_logout_and_shutdown_buttons()
{
document.getElementById("logout").childNodes.forEach(el => {
$(el).hide();
$(el).show();
});
}
wait_for_log_in_done = false;
function wait_for_log_in()
{
check_log_in(
function()
{
if (wait_for_log_in_done) return;
wait_for_log_in_done = true;
inject_html();
get_status();
show_logout_and_shutdown_buttons_i = 0;
show_logout_and_shutdown_buttons_timer_id = window.setInterval(function() {
show_logout_and_shutdown_buttons();
if (++show_logout_and_shutdown_buttons_i >= 6)
window.clearInterval(show_logout_and_shutdown_buttons_timer_id);
}, 500);
show_logout_and_shutdown_buttons();
window.setInterval(get_status, 1000);
window.setInterval(prevent_automatic_logout, 60000);
window.clearInterval(wait_for_log_in_timer_id);
},
function()
{
if (typeof show_log_in_info_once === "undefined")
console.log("Contents of script will show once you are logged in!");
show_log_in_info_once = true;
}
);
}
function init()
{
wait_for_log_in_timer_id = window.setInterval(wait_for_log_in, 250);
wait_for_log_in();
}
function perform_automatic_login_or_init()
{
if (have_admin_password_hash())
{
check_log_in(
function()
{
console.log("Already logged in ...");
init();
},
function()
{
console.log("Logging in ...");
perform_login(function() {
console.log("... logged in");
init();
hash_fix_i = 0;
hash_fix_timer_id = window.setInterval(function() {
window.location.hash = "home";
if (++hash_fix_i >= 10) window.clearInterval(hash_fix_timer_id);
}, 100);
});
}
);
}
else init();
}
/*
* Wait until inner version string is available.
*/
prepare_2_done = false;
function prepare_2()
{
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version"
},
dataType: "json",
success: function(a)
{
if (a.wa_inner_version == "" || prepare_2_done) return;
prepare_2_done = true;
is_mc888 = a.wa_inner_version.indexOf("MC888") > -1;
is_mc889 = a.wa_inner_version.indexOf("MC889") > -1;
if (is_mc888 || is_mc889) hash = SHA256;
else hash = hex_md5;
perform_automatic_login_or_init();
window.clearInterval(prepare_2_timer_id);
}
})
}
/*
* Wait until SHA256() is available.
*/
function prepare_1()
{
if (typeof SHA256 === "undefined")
{
return;
}
window.clearInterval(prepare_1_timer_id);
prepare_2_timer_id = window.setInterval(prepare_2, 250);
prepare_2();
}
function make_hidden_settings_visible()
{
alert("This option makes hidden device settings visible.\n" +
"Hidden settings are marked with a '[hidden option]' suffix");
window.setInterval(function() {
Array.from(document.querySelectorAll('*')).forEach(el => {
// $(el).hide();
// $(el).show();
if($("#ipv4_section").length > 0) {
$('#ipv4_section .row').css('display', 'block');
}
if (el.classList.contains("hide")) {
el.classList.remove("hide");
el.innerHTML += " [hidden option]";
}
})},
1000);
}
function have_admin_password_hash()
{
return cookies.get("admin_password_hash") !== null;
}
function perform_login(successCallback, developer_login = false, save_password_hash = false)
{
var password_hash = "";
if (have_admin_password_hash())
password_hash = cookies.get("admin_password_hash");
if (password_hash == "")
{
var password = prompt("Router Password");
if (password == null || password == "")
return;
password_hash = SHA256(password);
}
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD,LD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
$.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: developer_login ? "DEVELOPER_OPTION_LOGIN" : "LOGIN",
password: SHA256(password_hash + a.LD),
AD: ad
},
success: function(a)
{
var j = JSON.parse(a);
console.log(j);
if ("0" == j.result)
{
if (save_password_hash) cookies.set("admin_password_hash", password_hash);
if (successCallback) successCallback();
}
else
{
var reason = "";
switch (j.result)
{
case "1":
{
reason = "Try again later";
break;
}
case "3":
{
reason = "Wrong Password";
if (have_admin_password_hash())
{
console.log("Wrong password. Removing stored password hash ...");
cookies.delete("admin_password_hash");
}
break;
}
default: reason = "Unknown";
}
alert((developer_login ? "Developer login" : "Login") + " failed! Reason: " + reason + ".");
}
},
error: err
});
}
});
}
function prevent_automatic_logout()
{
$.ajax({
type: "GET",
url: "/tmpl/network/apn_setting.html?v=" + Math.round(+new Date() / 1000)
});
}
function enable_automatic_login()
{
var res = confirm("You can make this script log in for you\n" +
"once you paste it into the developer console.\n\n" +
"The password will be stored in a cookie as an SHA256 hash.\n\n" +
"Continue?");
if (!res)
return;
cookies.delete("admin_password_hash");
perform_login(function() {
alert("Successfully saved password as hash!");
}, false, true);
}
function check_log_in(logged_in_callback, not_logged_in_callback = null)
{
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
// multi_data is required here otherwise
// a false "ok" might be returned by the
// router if a session in another browser
// is running.
multi_data: "1",
cmd: "loginfo"
},
dataType: "json",
success: function(a)
{
if (a.loginfo.toLowerCase() == "ok")
{
if (logged_in_callback)
logged_in_callback();
}
else
{
if (not_logged_in_callback)
not_logged_in_callback();
}
},
error: err
});
}
class LteCaCellInfo
{
constructor(pci, band, earfcn, bandwidth, rssi, rsrp1, rsrp2, rsrp3, rsrp4, rsrq, sinr1, sinr2, sinr3, sinr4)
{
this.pci = pci;
this.band = band;
this.earfcn = earfcn;
this.bandwidth = bandwidth;
this.rssi = rssi;
this.rsrp1 = rsrp1;
this.rsrp2 = rsrp2;
this.rsrp3 = rsrp3;
this.rsrp4 = rsrp4;
this.rsrq = rsrq;
this.sinr1 = sinr1;
this.sinr2 = sinr2;
this.sinr3 = sinr3;
this.sinr4 = sinr4;
}
}
function parse_lte_cell_info()
{
//Object { lte_multi_ca_scell_sig_info: "-44.0,-3.0,19.5,0,2;", lte_multi_ca_scell_info: "1,XX,2,3,1525,15.0" }
// lte_multi_ca_scell_info
// 0: CaIndex
// 1: PCI
// 2: ??
// 3: Band
// 4: Earfcn
// 5: Bandwidth
// lte_multi_ca_scell_sig_info
// 0: RSRP, -44 invalid
// 1: RSRQ
// 2: SINR
// 3: ??
// 4: ??
if (!is_lte)
return [];
var lte_cells = [];
var lte_main_band =
(lte_ca_pcell_band != "" ? lte_ca_pcell_band : lte_band);
if (lte_main_band == "")
lte_main_band = "??";
lte_cells.push(new LteCaCellInfo(
parseInt(lte_pci, 16),
"B" + lte_main_band,
lte_ca_pcell_freq == "" ? wan_active_channel : lte_ca_pcell_freq,
(lte_ca_pcell_bandwidth != "" ? lte_ca_pcell_bandwidth : bandwidth).replace("MHz", "").replace(".0", ""),
lte_rssi,
lte_rsrp_1,
lte_rsrp_2,
lte_rsrp_3,
lte_rsrp_4,
lte_rsrq,
lte_snr_1,
lte_snr_2,
lte_snr_3,
lte_snr_4
));
// Only MC888 seems to have lte_multi_ca_scell_sig_info so far.
// MC889 doesn't have it.
var scell_infos = lte_multi_ca_scell_info.split(";").filter(n => n);
var scell_sig_infos = lte_multi_ca_scell_sig_info.split(";").filter(n => n);
for (var i = 0; i < scell_infos.length; i++)
{
if (scell_infos[i] == "")
continue;
var scell_info = scell_infos[i].split(",");
var have_scell_sig_info = scell_sig_infos.length > i;
var scell_sig_info = have_scell_sig_info ? scell_sig_infos[i].split(",") : undefined;
if (scell_info.length < 6)
continue;
if (have_scell_sig_info && scell_sig_info.length < 3)
continue;
lte_cells.push(new LteCaCellInfo(
parseInt(scell_info[1], 16), // PCI
"B" + scell_info[3], // Band
scell_info[4], // Earfcn
scell_info[5].replace(".0", ""), // Bandwidth
"", // RSSI
(have_scell_sig_info ? scell_sig_info[0] : "").replace("-44.0", "?????"), // RSRP
"",
"",
"",
have_scell_sig_info ? scell_sig_info[1] : "", // RSRQ
have_scell_sig_info ? scell_sig_info[2] : "", // SINR
"",
"",
""));
}
return lte_cells;
}
class NrCaCellInfo
{
constructor(pci, band, arfcn, bandwidth, rsrp1, rsrp2, rsrq, sinr)
{
this.pci = pci;
this.band = band;
this.arfcn = arfcn;
this.bandwidth = bandwidth;
this.rsrp1 = rsrp1;
this.rsrp2 = rsrp2;
this.rsrq = rsrq;
this.sinr = sinr;
this.unchanged_updates = 0;
this.info_text = "";
}
}
function parse_nr_cell_info()
{
if (!is_5g)
return [];
if (is_5g_nsa && !is_5g_nsa_active)
{
// Base station is capable of 5G NSA
// but we don't have any receipton of the NSA band.
return [];
}
/*
* There's apparently no better fix for this.
* The API does not reset its memory correctly after switching from
* 5G CA to 5G without CA.
*/
var is_ca = nr_ca_pcell_freq == "" || nr5g_action_channel == nr_ca_pcell_freq;
if (_5g_rx0_rsrp == "")
_5g_rx0_rsrp = Z5g_rsrp;
var nr_cells = [];
var allowed_nr_bands =
(is_5g_nsa ? nr5g_nsa_band_lock : nr5g_sa_band_lock).split(",");
if (!is_ca) {
var nr_band =
(is_5g_nsa ? "n" + nr5g_action_nsa_band : nr5g_action_band);
if (nr_band == "n" || nr_band == "n-1")
nr_band = "n??";
nr_cells.push(new NrCaCellInfo(
parseInt(nr5g_pci, 16),
nr_band,
nr5g_action_channel,
is_5g_nsa ? "" : bandwidth.replace("MHz", ""),
_5g_rx0_rsrp,
_5g_rx1_rsrp,
Z5g_rsrq,
Z5g_SINR.replace("-20.0", "?????").replace("-3276.8", "?????")
));
previous_nr_cells = nr_cells;
return nr_cells;
}
var pcc_band = nr_ca_pcell_band != ""
? nr_ca_pcell_band
: (nr5g_action_band != ""
? (nr5g_action_band[0] == 'n' || nr5g_action_band[0] == 'N'
? nr5g_action_band.substr(1)
: nr5g_action_band)
: "??");
var pcc_freq = nr_ca_pcell_freq != ""
? nr_ca_pcell_freq
: (nr5g_action_channel != ""
? nr5g_action_channel
: "??");
nr_cells.push(new NrCaCellInfo(
parseInt(nr5g_pci, 16),
"n" + pcc_band,
pcc_freq,
bandwidth == "" ? "" : bandwidth.replace("MHz", ""),
_5g_rx0_rsrp,
_5g_rx1_rsrp,
Z5g_rsrq,
Z5g_SINR.replace("-20.0", "?????").replace("-3276.8", "?????")
));
nr_multi_ca_scell_info.split(";").forEach(cell => {
if (cell == "")
return;
// 0,XX,1,n75,292330,30MHz,0,-73.3,-10.5,17.5;
// 0 1 2 3 4 5 6 7 8 9
var cell_data = cell.split(",");
if (cell_data.length < 10)
return;
var nr_band = cell_data[3].replace("n", "");
/*
* Try to detect false data. See comment above.
*/
if (allowed_nr_bands.indexOf(nr_band) == -1)
return;
nr_cells.push(new NrCaCellInfo(
cell_data[1], // PCI
cell_data[3], // Band
cell_data[4], // Arfcn
cell_data[5].replace("MHz", ""),
cell_data[7], // RSRP
"",
cell_data[8], // RSRQ
cell_data[9].replace("0.0", "?????") // SINR
));
});
/*
* Try to detect false data. See comment above.
* Only do this for SCells.
*/
if (false && typeof previous_nr_cells !== "undefined" && nr_cells.length == previous_nr_cells.length)
{
for (var i = 1; i < nr_cells.length; i++)
{
if (nr_cells[i].rsrp1 == previous_nr_cells[i].rsrp1 &&
nr_cells[i].sinr == previous_nr_cells[i].sinr)
{
nr_cells[i].unchanged_updates = previous_nr_cells[i].unchanged_updates + 1;
if (nr_cells[i].unchanged_updates >= 30)
nr_cells[i].info_text = "[Data might be invalid]";
}
}
}
previous_nr_cells = nr_cells;
return nr_cells;
}
function get_band_info(cells)
{
var bands = "";
cells.forEach(cell => {
var info = cell.band;
if (cell.bandwidth != "") info += "(" + cell.bandwidth + "MHz)";
bands += bands ? " + " : "";
bands += info;
});
return bands;
}
function get_status()
{
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: siginfo,
multi_data: "1"
},
dataType: "json",
success: function(a)
{
for (signal = a, vars = siginfo.split(','), e = 0; e < vars.length; e++)
{
v = vars[e];
window[(!isNaN(v[0]) ? "_" : "" ) + v] = a[v];
}
is_umts = (network_type == "HSPA" || network_type == "HSDPA" || network_type == "HSUPA" || network_type == "HSPA+" || network_type == "DC-HSPA+" ||
network_type == "UMTS" || network_type == "CDMA" || network_type == "CDMA_EVDO" || network_type == "EVDO_EHRPD" || network_type == "TDSCDMA");
// MC801 = EN-DC, MC801A = ENDC
is_lte = (network_type == "LTE" || network_type == "ENDC" || network_type == "EN-DC" || network_type == "LTE-NSA");
is_lte_plus = (wan_lte_ca && (wan_lte_ca == "ca_activated" || wan_lte_ca == "ca_deactivated"));
is_5g_sa = (network_type == "SA");
is_5g_nsa = (network_type == "ENDC" || network_type == "EN-DC" || network_type == "LTE-NSA");
is_5g_nsa_active = is_5g_nsa && network_type != "LTE-NSA";
is_5g = is_5g_sa || is_5g_nsa;
if (is_umts) $("#umts_signal_container").show();
else $("#umts_signal_container").hide();
if (is_lte_plus) $("#lte_ca_active_tr").show();
else $("#lte_ca_active_tr").hide();
if (network_provider_fullname != "") $("#provider").show();
else $("#provider").hide();
if (cell_id) $("#cell").show();
else $("#cell").hide();
if (is_5g && nr5g_cell_id) $("#5g_cell").show();
else $("#5g_cell").hide();
if (tx_power != "" && is_lte && !is_5g_nsa /* Prevent showing an outdated value from an LTE session */)
{
tx_power += " dBm (" + Math.pow(10, tx_power/10.0).toFixed(3) + " mW)";
$("#txp").show();
}
else $("#txp").hide();
$("#ca_active").html(wan_lte_ca && wan_lte_ca == "ca_activated" ? "&#10003;" : "&#10005;");
/*
* LTE Cell Info
*/
var lte_cells = parse_lte_cell_info();
var2html("__lte_signal", lte_cells);
for (var i = 0; i < 6; i++)
{
var cell_num = i + 1;
if (is_lte && lte_cells.length > i)
{
var lte_cell = lte_cells[i];
if (lte_cell.rsrp1 != "")
{
$("#lte_" + cell_num + "_rsrp").show();
$("#lte_" + cell_num + "_sinr").show();
$("#lte_" + cell_num + "_rsrq").show();
}
else
{
$("#lte_" + cell_num + "_rsrp").hide();
$("#lte_" + cell_num + "_sinr").hide();
$("#lte_" + cell_num + "_rsrq").hide();
}
$("#lte_" + cell_num).show();
}
else $("#lte_" + cell_num).hide();
}
var lte_bands = get_band_info(lte_cells);
/*
* LTE Cell Info End
*/
/*
* NR Cell Info
*/
var nr_cells = parse_nr_cell_info();
var2html("__nr_signal", nr_cells);
for (var i = 1; i <= 3; i++)
{
if (is_5g && nr_cells.length >= i) $("#5g_" + i).show();
else $("#5g_" + i).hide();
}
if (nr_cells.length > 0)
{
if (nr_cells[0].rsrp2 != "") $("#5g_1_rsrp2").show();
else $("#5g_1_rsrp2").hide();
// Not available with NSA
if (nr_cells[0].bandwidth != "") $("#5g_1_bandwidth").show();
else $("#5g_1_bandwidth").hide();
}
var nr_bands = get_band_info(nr_cells);
/*
* NR Cell Info End
*/
/*
* Band info
*/
var bandinfo = lte_bands;
if (nr_bands != "")
{
if (bandinfo != "") bandinfo += " + ";
bandinfo += nr_bands;
}
if (bandinfo != "")
{
$("#__bandinfo").html(bandinfo);
$("#bandinfo").show();
}
else $("#bandinfo").hide();
/*
* Band info end
*/
if (is_umts && lte_ca_pcell_band)
$("#umts_signal_table_main_band").html(" (" + lte_ca_pcell_band + ")");
if (ngbr_cell_info)
{
if (is_lte)
{
var ngbr_cells = ngbr_cell_info.split(";");
if (ngbr_cells.length > 0)
{
var html = "<table class='ngbr_cell_table'>";
for (var i = 0; i < ngbr_cells.length; i++)
{
var cell = ngbr_cells[i];
var [freq, pci, rsrq, rsrp, rssi] = cell.split(",");
html += "<tr><td>"+ pci + ":</td><td>RSRP: " + rsrp + " dBm&nbsp;</td><td>RSRQ: " + rsrq + " dB</td></tr>";
}
html += "</table>";
}
ngbr_cell_info = html;
}
else
{
ngbr_cell_info = ngbr_cell_info.replace(";", "<br>");
}
$("#ngbr_cells").show();
}
else
{
$("#ngbr_cells").hide();
}
if (wan_ipaddr) $("#wanipinfo").show();
else $("#wanipinfo").hide();
if (pm_sensor_ambient || pm_sensor_mdm || pm_sensor_5g || pm_sensor_pa1 || wifi_chip_temp)
{
var temp = "";
if (pm_sensor_ambient && pm_sensor_ambient > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "A:&nbsp;" + pm_sensor_ambient + "°c";
if (pm_sensor_mdm && pm_sensor_mdm > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "M:&nbsp;" + pm_sensor_mdm + "°c";
if (pm_sensor_5g && pm_sensor_5g > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "5G:&nbsp;" + pm_sensor_mdm + "°c";
if (pm_sensor_pa1 && pm_sensor_pa1 > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "P:&nbsp;" + pm_sensor_pa1 + "°c";
if (wifi_chip_temp && wifi_chip_temp > -40) temp += (temp ? "&nbsp;&nbsp;" : "") + "W:&nbsp;" + wifi_chip_temp + "°c";
$("#temps").html(temp);
$("#temperature").show();
}
else $("#temperature").hide();
for (e = 0; e < vars.length; e++)
{
v = vars[e];
v = (!isNaN(v[0]) ? "_" : "" ) + v;
$("#" + v).html(window[v]);
}
}
})
}
function err(a, e, n)
{
alert("Communication Error"), console.log(a), console.log(e), console.log(n)
}
function set_net_mode(mode = null)
{
var modes = [
"Only_GSM",
"Only_WCDMA",
"Only_LTE",
"WCDMA_AND_GSM",
"WCDMA_preferred",
"WCDMA_AND_LTE",
"GSM_AND_LTE",
"CDMA_EVDO_LTE",
"Only_TDSCDMA",
"TDSCDMA_AND_WCDMA",
"TDSCDMA_AND_LTE",
"TDSCDMA_WCDMA_HDR_CDMA_GSM_LTE",
"TDSCDMA_WCDMA_GSM_LTE",
"GSM_WCDMA_LTE",
"Only_5G",
"LTE_AND_5G",
"GWL_5G",
"TCHGWL_5G",
"WL_AND_5G",
"TGWL_AND_5G",
"4G_AND_5G"
];
mode = mode || prompt("Enter one of\n" + modes.join(", "), "WL_AND_5G");
if (!mode) return;
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
$.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "SET_BEARER_PREFERENCE",
BearerPreference: mode,
AD: ad
},
success: function(a)
{
console.log(a);
j = JSON.parse(a);
if ("success" != j.result)
alert("Setting mode to '" + mode + "' failed");
},
error: err
})
}
})
}
function lte_cell_lock(reset = false) {
var lockParameters;
if (reset) {
lockParameters = ["0", "0"];
} else {
var defaultPciEarfcn = parseInt(lte_pci, 16) + "," + wan_active_channel;
var cellLockDetails = prompt("Please input PCI,EARFCN, separated by ',' char (example 116,3350). "+
"Leave default for lock on current main band.", defaultPciEarfcn);
if (cellLockDetails === null || cellLockDetails.trim() === "") {
return;
}
var inputValues = cellLockDetails.split(",");
var pciIsValid = !isNaN(inputValues[0]) && Number.isInteger(parseFloat(inputValues[0]));
var earfcnIsValid = !isNaN(inputValues[1]) && Number.isInteger(parseFloat(inputValues[1]));
if (!pciIsValid || !earfcnIsValid) {
alert("Invalid input. Please ensure all values are correctly formatted.");
return;
}
lockParameters = inputValues;
}
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data: {
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a) {
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
$.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data: {
isTest: "false",
goformId: "LTE_LOCK_CELL_SET",
lte_pci_lock: lockParameters[0],
lte_earfcn_lock: lockParameters[1],
AD: ad
},
success: function(a) {
var response = JSON.parse(a);
if (response.result === "success") {
var rebootMessage =
"You have to reboot your Router in order " +
(reset ? "to remove the cell lock" : "for the cell lock to be active") + ".\n\nReboot now?";
if (confirm(rebootMessage)) {
reboot(true);
}
} else {
alert("Error.");
}
},
error: function(err) {
console.error(err);
alert("An error occurred while attempting to lock the cell.");
}
});
}
});
}
function nr_cell_lock(reset = false) {
var cellLockDetails;
if (reset) {
cellLockDetails = "0,0,0,0";
} else {
var nrCellInfo = parse_nr_cell_info();
var defaultCellDetails = "";
if (nrCellInfo.length > 0) {
var primaryNrCell = nrCellInfo[0];
defaultCellDetails = primaryNrCell.pci + ',' + primaryNrCell.arfcn + ',' + primaryNrCell.band.replace('n', '') + ',' + "30";
}
cellLockDetails = prompt("Please input PCI,ARFCN,BAND,SCS separated by ',' char (example 202,639936,78,30). " +
"Leave default for locking the current NR primary band. You may need to adjust the SCS.", defaultCellDetails);
if (cellLockDetails === null || cellLockDetails.trim() === "") {
return;
} else {
var inputValues = cellLockDetails.split(",");
var pciIsValid = !isNaN(inputValues[0]) && Number.isInteger(parseFloat(inputValues[0]));
var arfcnIsValid = !isNaN(inputValues[1]) && Number.isInteger(parseFloat(inputValues[1]));
var bandIsValid = !isNaN(inputValues[2]) && Number.isInteger(parseFloat(inputValues[2]));
var scsIsValid = ["15", "30", "60", "120", "240"].includes(inputValues[3]);
if (!pciIsValid || !arfcnIsValid || !bandIsValid || !scsIsValid) {
alert("Invalid input. Please ensure all values are correctly formatted.");
return;
}
}
}
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data: {
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a) {
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD);
$.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data: {
isTest: "false",
goformId: "NR5G_LOCK_CELL_SET",
nr5g_cell_lock: cellLockDetails,
AD: ad
},
success: function(a) {
var response = JSON.parse(a);
if (response.result === "success") {
var rebootMessage =
"You have to reboot your Router in order " +
(reset ? "to remove the cell lock" : "for the cell lock to be active")+ ".\n\nReboot now?";
if (confirm(rebootMessage)) {
reboot(true);
}
} else {
alert("Error.");
}
},
error: function(err) {
console.error(err);
alert("An error occurred while attempting to lock the cell.");
}
});
}
});
}
function lte_band_selection(a = null, nested_attempt_with_dev_login = false)
{
a = a || prompt("Please input LTE bands number, separated by + char (example 1+3+20). If you want to use every supported band, write 'AUTO'.", "AUTO");
var had_admin_password_hash = have_admin_password_hash();
if (null != (a = a && a.toLowerCase()) && "" !== a)
{
var e = a.split("+");
var n = 0;
var all_bands = "0xA3E2AB0908DF";
if ("AUTO" === a.toUpperCase())
{
n = all_bands;
}
else
{
for (var l = 0; l < e.length; l++) n += Math.pow(2, parseInt(e[l]) - 1);
n = n.toString(16);
n = "0x" + (Math.pow(10, 11 - n.length) + n + "").substr(1);
}
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "BAND_SELECT",
is_gw_band: 0,
gw_band_mask: 0,
is_lte_band: 1,
lte_band_mask: n,
AD: ad
},
success: function(a)
{
console.log(a);
var j = JSON.parse(a);
if ("success" == j.result)
{
if (nested_attempt_with_dev_login)
{
if (!had_admin_password_hash)
alert("Successfully performed LTE band lock with developer login ...");
}
}
else
{
if (!nested_attempt_with_dev_login && !logged_in_as_developer)
{
if (!had_admin_password_hash)
{
alert("LTE band locking failed.\n\n" +
"Your device model may require to log in as developer\n" +
"in order to be able to lock LTE bands.");
}
perform_login(
function() {
logged_in_as_developer = true;
lte_band_selection(a, true);
}, true);
}
else
{
alert("LTE band locking with developer login still failed.\nThere might be something else wrong.");
}
}
},
error: err
})
}
})
}
}
function nr_band_selection(a)
{
var e;
var a = a || prompt("Please input 5G bands number, separated by + char (example 3+78). If you want to use every supported band, write 'AUTO'.", "AUTO");
null != a && "" !== a && (e = a.split("+").join(","));
"AUTO" === a.toUpperCase() && (e = "1,2,3,5,7,8,20,28,38,41,50,51,66,70,71,74,75,76,77,78,79,80,81,82,83,84");
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "WAN_PERFORM_NR5G_BAND_LOCK",
nr5g_band_mask: e,
AD: ad
},
success: function(a)
{
console.log(a);
},
error: err
})
}
});
}
function bridge_mode(enable)
{
if (!confirm((enable ? "Enable" : "Disable") + " bridge mode and reboot router?"))
return;
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "OPERATION_MODE",
opMode: (enable ? "LTE_BRIDGE" : "PPP"),
ethernet_port_specified: "1",
AD: ad
},
success: function(a)
{
console.log(a);
alert("Successfully " + (enable ? "enabled" : "disabled") + " bridge mode! Rebooting ..." +
(enable ? "\n\nIf your device has multiple LAN port then the lower one\nis the WAN/bridge port!" : ""));
reboot(true);
},
error: err
})
}
})
}
function arp_proxy(enable)
{
if (!confirm((enable ? "Enable" : "Disable") + " ARP proxy and reboot router?"))
return;
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "ARP_PROXY_SWITCH",
arp_proxy_switch: enable ? 1 : 0,
AD: ad
},
success: function(a)
{
console.log(a);
alert((enable ? "Enabled" : "Disabled") + " ARP proxy!");
reboot(true);
},
error: err
})
}
})
}
function reboot(force = false)
{
if (!force && !confirm("Reboot Router?"))
return
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
ad = hash(hash(a.wa_inner_version + a.cr_version) + a.RD), $.ajax({
type: "POST",
url: "/goform/goform_set_cmd_process",
data:
{
isTest: "false",
goformId: "REBOOT_DEVICE",
AD: ad
},
success: function(a)
{
console.log(a);
if (!force) alert("Rebooting ...");
},
error: err
})
}
})
}
function version_info()
{
$.ajax({
type: "GET",
url: "/goform/goform_get_cmd_process",
data:
{
cmd: "hardware_version,web_version,wa_inner_version,cr_version,RD",
multi_data: "1"
},
dataType: "json",
success: function(a)
{
v = "HW version: " + a.hardware_version + "\nWEB version: " + a.web_version + "\nWA INNER version: " + a.wa_inner_version;
alert(v);
}
})
}
function inject_main_container_if_missing() {
// Newer models like the MC888 Ultra don't have a main container anymore.
// Inject a fake one to get the script working.
if (!$("#mainContainer").length) {
$("body").prepend(`
<div id="mainContainer" align="center">
<style>
#mainContainer table {
margin: 0 auto;
text-align: left;
}
#mainContainer a {
color: #007bff;
text-decoration: none;
cursor: pointer;
}
#mainContainer a:hover {
text-decoration: underline;
}
</style>
</div>
`);
}
}
function inject_html()
{
inject_main_container_if_missing();
$(".color_background_blue").css("background-color", "#456");
$(".headcontainer").hide();
$("#mainContainer").prepend(`
<style>
.clear {
clear: both;
}
li span {
margin-left: 5px;
}
.f {
/*float: left;*/
border: 1px solid #bbb;
border-radius: 5px;
padding: 10px;
line-height: 2em;
margin: 5px;
}
.f ul {
margin: 0;
padding: 0;
}
.f ul li {
display: inline;
margin-right: 5px;
margin-left: 5px;
}
.p {
border-bottom: 1px solid #ccc;
width: auto;
height: 20px;
}
.v {
height: 100%25;
border-right: 1px solid #ccc;
}
.sb {
padding: 10px;
border-radius: 10px;
display: inline-block;
margin: 10px 0 10px 10px;
}
.v {
padding-left: 20px;
}
.mod_border {
border-radius: 5px;
border-style: hidden;
box-shadow: 0 0 0 3px #999;
}
.mod_container {
width: 940px;
border: 4px solid #40adf5;
border-radius: 10px;
padding: 5px;
font-family: Verdana;
font-size: 13px;
}
.inner_mod_container {
width: 600px;
margin: 0 auto;
}
.mod_table {
all: revert;
border-collapse: collapse;
border-radius: 5px;
border-style: hidden;
box-shadow: 0 0 0 3px #999;
}
.mod_table td {
border: 3px solid #999;
padding: 5px;
border-radius: 20px;
}
.ngbr_cell_table {
all: revert;
border: none;
}
.ngbr_cell_table td {
all: revert;
border: none;
}
.signal_table {
width: 100%;
}
.signal_table td {
width: 75px;
}
.cellinfo_table {
width: 100%;
table-layout: fixed;
}
.spacing {
padding: 10px;
}
.spacing_small {
padding: 5px;
}
.spacing_links {
padding: 1px;
}
.links_container {
font-size: 14px;
text-align: left;
}
</style>
<div class="mod_container">
<div class="spacing_small"></div>
<div class="inner_mod_container">
<!-- LTE Primary -->
<div id="lte_1">
<table class="mod_table signal_table">
<tr>
<td colspan='4' style='text-align:center'>LTE (<span id="__lte_signal_0_band"></span>)</td>
</tr>
<tr>
<td>RSRP1:</td>
<td><span id="__lte_signal_0_rsrp1"></span> dBm</td>
<td>SINR1:</td>
<td><span id="__lte_signal_0_sinr1"></span> dB</td>
</tr>
<tr>
<td>RSRP2:</td>
<td><span id="__lte_signal_0_rsrp2"></span> dBm</td>
<td>SINR2:</td>
<td><span id="__lte_signal_0_sinr2"></span> dB</td>
</tr>
<tr>
<td>RSRP3:</td>
<td><span id="__lte_signal_0_rsrp3"></span> dBm</td>
<td>SINR3:</td>
<td><span id="__lte_signal_0_sinr3"></span> dB</td>
</tr>
<tr>
<td>RSRP4:</td>
<td><span id="__lte_signal_0_rsrp4"></span> dBm</td>
<td>SINR4:</td>
<td><span id="__lte_signal_0_sinr4"></span> dB</td>
</tr>
<tr>
<td>RSRQ:</td>
<td><span id="__lte_signal_0_rsrq"></span> dB</td>
<td>RSSI:</td>
<td><span id="__lte_signal_0_rssi"></span> dBm</td>
</tr>
<tr id="lte_1_earfcn">
<td colspan='2'>EARFCN:</td>
<td colspan='2'><span id="__lte_signal_0_earfcn"></span></td>
</tr>
<tr>
<td colspan='2'>PCI:</td>
<td colspan='2'><span id="__lte_signal_0_pci"></span></td>
</tr>
<tr>
<td colspan='2'>BW:</td>
<td colspan='2'><span id="__lte_signal_0_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="lte_2">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_1_band"></span>)</td>
</tr>
<tr id="lte_2_rsrp">
<td>RSRP:</td>
<td><span id="__lte_signal_1_rsrp1"></span> dBm</td>
</tr>
<tr id="lte_2_sinr">
<td>SINR:</td>
<td><span id="__lte_signal_1_sinr1"></span> dB</td>
</tr>
<tr id="lte_2_rsrq">
<td>RSRQ:</td>
<td><span id="__lte_signal_1_rsrq"></span> dB</td>
</tr>
<tr id="lte_2_earfcn">
<td>EARFCN:</td>
<td><span id="__lte_signal_1_earfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__lte_signal_1_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__lte_signal_1_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="lte_3">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_2_band"></span>)</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__lte_signal_2_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__lte_signal_2_sinr1"></span> dB</td>
</tr>
<tr>
<td>RSRQ:</td>
<td><span id="__lte_signal_2_rsrq"></span> dB</td>
</tr>
<tr id="lte_3_earfcn">
<td>EARFCN:</td>
<td><span id="__lte_signal_2_earfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__lte_signal_2_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__lte_signal_2_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="lte_4">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_3_band"></span>)</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__lte_signal_3_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__lte_signal_3_sinr1"></span> dB</td>
</tr>
<tr>
<td>RSRQ:</td>
<td><span id="__lte_signal_3_rsrq"></span> dB</td>
</tr>
<tr id="lte_4_earfcn">
<td>EARFCN:</td>
<td><span id="__lte_signal_3_earfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__lte_signal_3_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__lte_signal_3_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="lte_5">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_4_band"></span>)</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__lte_signal_4_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__lte_signal_4_sinr1"></span> dB</td>
</tr>
<tr>
<td>RSRQ:</td>
<td><span id="__lte_signal_4_rsrq"></span> dB</td>
</tr>
<tr id="lte_5_earfcn">
<td>EARFCN:</td>
<td><span id="__lte_signal_4_earfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__lte_signal_4_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__lte_signal_4_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="lte_6">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>LTE (<span id="__lte_signal_5_band"></span>)</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__lte_signal_5_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__lte_signal_5_sinr1"></span> dB</td>
</tr>
<tr>
<td>RSRQ:</td>
<td><span id="__lte_signal_5_rsrq"></span> dB</td>
</tr>
<tr id="lte_6_earfcn">
<td>EARFCN:</td>
<td><span id="__lte_signal_5_earfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__lte_signal_5_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__lte_signal_5_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="umts_signal_container">
<table class="mod_table signal_table">
<tr>
<td colspan='4' style='text-align:center'>UMTS<span id="umts_signal_table_main_band"></span></td>
</tr>
<tr>
<td>RSCP1:</td>
<td><span id="rscp_1"></span> dBm</td>
<td>ECIO1:</td>
<td>-<span id="ecio_1"></span> dB</td>
</tr>
<tr>
<td>RSCP2:</td>
<td><span id="rscp_2"></span> dBm</td>
<td>ECIO2:</td>
<td>-<span id="ecio_2"></span> dB</td>
</tr>
<tr>
<td>RSCP3:</td>
<td><span id="rscp_3"></span> dBm</td>
<td>ECIO3:</td>
<td>-<span id="ecio_3"></span> dB</td>
</tr>
<tr>
<td>RSCP4:</td>
<td><span id="rscp_4"></span> dBm</td>
<td>ECIO4:</td>
<td>-<span id="ecio_4"></span> dB</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<!-- NR Primary -->
<div id="5g_1">
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>
5G (<span id="__nr_signal_0_band"></span>)
<span id="__nr_signal_0_info_text"></span>
</td>
</tr>
<tr>
<td>RSRP1:</td>
<td><span id="__nr_signal_0_rsrp1"></span> dBm</td>
</tr>
<tr id="5g_1_rsrp2">
<td>RSRP2:</td>
<td><span id="__nr_signal_0_rsrp2"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__nr_signal_0_sinr"></span> dB</td>
</tr>
<tr id="5g_1_arfcn">
<td>ARFCN:</td>
<td><span id="__nr_signal_0_arfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__nr_signal_0_pci"></span></td>
</tr>
<tr id="5g_1_bandwidth">
<td>BW:</td>
<td><span id="__nr_signal_0_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="5g_2">
<!-- NR Scell1 -->
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>
5G (<span id="__nr_signal_1_band"></span>)
<span id="__nr_signal_1_info_text"></span>
</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__nr_signal_1_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__nr_signal_1_sinr"></span> dB</td>
</tr>
<tr id="5g_2_arfcn">
<td>ARFCN:</td>
<td><span id="__nr_signal_1_arfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__nr_signal_1_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__nr_signal_1_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div id="5g_3">
<!-- NR Scell2 -->
<table class="mod_table signal_table">
<tr>
<td colspan='2' style='text-align:center'>
5G (<span id="__nr_signal_2_band"></span>)
<span id="__nr_signal_2_info_text"></span>
</td>
</tr>
<tr>
<td>RSRP:</td>
<td><span id="__nr_signal_2_rsrp1"></span> dBm</td>
</tr>
<tr>
<td>SINR:</td>
<td><span id="__nr_signal_2_sinr"></span> dB</td>
</tr>
<tr id="5g_3_arfcn">
<td>ARFCN:</td>
<td><span id="__nr_signal_2_arfcn"></span></td>
</tr>
<tr>
<td>PCI:</td>
<td><span id="__nr_signal_2_pci"></span></td>
</tr>
<tr>
<td>BW:</td>
<td><span id="__nr_signal_2_bandwidth"></span> MHz</td>
</tr>
</table>
<div class="spacing"></div>
</div>
<div>
<table class="mod_table cellinfo_table">
<tr id="provider">
<td>PROVIDER:</td>
<td><span id="network_provider_fullname"></span></td>
</tr>
<tr id="cell">
<td>CELL:</td>
<td><span id="cell_id"></span></td>
</tr>
<tr id="5g_cell">
<td>5G CELL:</td>
<td><span id="nr5g_cell_id"></span></td>
</tr>
<tr id="ngbr_cells">
<td>NGBR:</td>
<td><span id="ngbr_cell_info"></span></td>
</tr>
<tr id="txp">
<td>TX POWER:</td>
<td><span id="tx_power"></span></td>
</tr>
<tr>
<td>CONNECTION:</td>
<td><span id="network_type"></span></td>
</tr>
<tr id="bandinfo">
<td>BANDS:</td>
<td>
<span id="__bandinfo">
</td>
</tr>
<tr id="lte_ca_active_tr">
<td>LTE CA ACTIVE:</td>
<td><span id="ca_active"></span></td>
</tr>
<tr id="wanipinfo">
<td>WAN IP:</td>
<td><span id="wan_ipaddr"></span></td>
</tr>
<tr id="temperature">
<td>TEMP:</td>
<td id="temps"></td>
</tr>
</table>
</div>
</div>
<div class="spacing"></div>
<div class="inner_mod_container mod_border links_container">
<a onclick="set_net_mode()">Network Mode</a>
[
<a onclick="set_net_mode('WL_AND_5G')">Auto</a> |
<a onclick="set_net_mode('Only_5G')">5G SA</a> |
<a onclick="set_net_mode('LTE_AND_5G')">5G NSA</a> |
<a onclick="set_net_mode('4G_AND_5G')">5G SA/NSA/LTE</a> |
<a onclick="set_net_mode('Only_LTE')">LTE</a> |
<a onclick="set_net_mode('Only_WCDMA')">3G</a> |
<a onclick="set_net_mode('Only_GSM')">2G</a>
]
<div class="spacing_links"></div>
<div id="lte_band_selection">
<a onclick="lte_band_selection()">LTE Bands</a>
[
<a onclick="lte_band_selection('AUTO')">Auto</a> |
<a onclick="lte_band_selection('1')">B1</a> |
<a onclick="lte_band_selection('3')">B3</a> |
<a onclick="lte_band_selection('7')">B7</a> |
<a onclick="lte_band_selection('8')">B8</a> |
<a onclick="lte_band_selection('20')">B20</a> |
<a onclick="lte_band_selection('1+3')">B1+B3</a> |
<a onclick="lte_band_selection('1+3+7')">B1+B3+B7</a>
]
<div class="spacing_links"></div>
</div>
<a onclick="nr_band_selection()">5G Bands</a>
[
<a onclick="nr_band_selection('AUTO')">Auto</a> |
<a onclick="nr_band_selection('1')">N1</a> |
<a onclick="nr_band_selection('3')">N3</a> |
<a onclick="nr_band_selection('7')">N7</a> |
<a onclick="nr_band_selection('28')">N28</a> |
<a onclick="nr_band_selection('28,75')">N28+N75</a> |
<a onclick="nr_band_selection('78')">N78</a> |
<a onclick="nr_band_selection('78,28,75')">N78+N28+N75</a>
]
<div class="spacing_links"></div>
<a onclick="bridge_mode(true)">Enable bridge mode</a> | <a onclick="bridge_mode(false)">Disable bridge mode</a>
<div class="spacing_links"></div>
<a onclick="arp_proxy(true)">Enable ARP proxy</a> | <a onclick="arp_proxy(false)">Disable ARP proxy</a>
<div class="spacing_links"></div>
<a onclick="make_hidden_settings_visible()">Show hidden device settings</a>
<div class="spacing_links"></div>
<a onclick="enable_automatic_login()">Enable Automatic Login</a> | <a onclick="version_info()">Version Info</a>
<div class="spacing_links"></div>
<a onclick="lte_cell_lock()">LTE Cell Lock</a> <span id="lte_cell_lock"></span> |
<a onclick="lte_cell_lock(true)">Remove LTE Cell Lock</a> <span id="undo_lte_cell_lock"></span> ||
<a onclick="nr_cell_lock()">5G Cell Lock</a> <span id="nr_cell_lock"></span> |
<a onclick="nr_cell_lock(true)">Remove 5G Cell Lock</a> <span id="undo_nr_cell_lock"></span>
<div class="spacing_links"></div>
Config: <a onclick="config_SHOW_APN_DNS()">APN DNS</a>
<div class="spacing_links"></div>
<a onclick="reboot()">Reboot Router</a>
<br>
</div>
<div class="spacing_small"></div>
</div>
<div class="spacing"></div>
`)
}
function set_config(key, value){
if (typeof require.s.contexts._.defined["config/config"][key] === "undefined") {
console.log("Config key not found, setting it anyway: " + key);
} else {
console.log("Previous config value: " + require.s.contexts._.defined["config/config"][key]);
}
console.log("Setting config: " + key + " to " + value);
require.s.contexts._.defined["config/config"][key] = value;
}
function config_SHOW_APN_DNS(){
const value = prompt("Show APN DNS settings? (true/false)", "true");
set_config("SHOW_APN_DNS", value === "true");
}
prepare_1_timer_id = window.setInterval(prepare_1, 250);
prepare_1();
$("#change").prop("disabled", !1);
$("#umts_signal_container").hide();
for (var i = 1; i <= 3; i++) $("#5g_" + i).hide();
for (var i = 1; i <= 6; i++) $("#lte_" + i).hide();
$("#lte_ca_active_tr").hide();
$("#provider").hide();
$("#cell").hide();
$("#5g_cell").hide();
$("#ngbr_cells").hide();
$("#txp").hide();
$("#temperature").hide();
$("#wanipinfo").hide();
@Nevarro
Copy link

Nevarro commented May 11, 2024

Thanks for the great script. I have been trying to enable bridge mode to make everything work with an external IP via my FritzBox. Is bridge mode available via USB or just via LAN? I have been using the Telekom Schnellstart 3 (a rebranded Huawei LTE router) via USB bridge mode and hoped that the ZTE MU5001 would work like that, too.

It shows a different IP- and WAN-Adress, so I guess it should be working!? Bridge mode with my Huawei LTE router always showed a 3x.xx.x.xx IP-adress in my FritzBox when using it in bridge mode compared to a 192.xxx.x.x IP. After activating bridge mode in my ZTE router the same happened, but I still can't reach my services from outside.

(gerne auch als Antwort auf Deutsch)

@Nico1788
Copy link

Thanks for the great script. I have been trying to enable bridge mode to make everything work with an external IP via my FritzBox. Is bridge mode available via USB or just via LAN? I have been using the Telekom Schnellstart 3 (a rebranded Huawei LTE router) via USB bridge mode and hoped that the ZTE MU5001 would work like that, too.

It shows a different IP- and WAN-Adress, so I guess it should be working!? Bridge mode with my Huawei LTE router always showed a 3x.xx.x.xx IP-adress in my FritzBox when using it in bridge mode compared to a 192.xxx.x.x IP. After activating bridge mode in my ZTE router the same happened, but I still can't reach my services from outside.

(gerne auch als Antwort auf Deutsch)

Hi, how did you activate the bridge mode on the ZTE Mu5001 router? I can't find this option.

@Nevarro
Copy link

Nevarro commented Sep 3, 2024

@Nico1788 After using the script, there a bridge option somewhere. I sold the router and therefore, I can't check again, sorry.

@Nico1788
Copy link

Nico1788 commented Sep 3, 2024

After using the script, there a bridge option somewhere. I sold the router and therefore, I can't check again, sorry.

@Nevarro
thanks for the answer, the problem is how do I start this script, I tried to add it to the chrome web page as a favorite by adding at the beginning of the javascript script: ftb(); but once I'm on the main page of the zte and starting the script it does nothing. how did you start this script? thanks in advance

@Nico1788
Copy link

Nico1788 commented Sep 3, 2024

@Nevarro ok I figured out how to start this wonderful script, in the chrome console, wow how many beautiful settings, I found the bridge mode and activated it successfully :)

@Technerd-SG
Copy link

@Nevarro ok I figured out how to start this wonderful script, in the chrome console, wow how many beautiful settings, I found the bridge mode and activated it successfully :)

What router did you have? Did you activate it on the ZTE Mu5001? And what options did you get? Thanks!!

@Nevarro
Copy link

Nevarro commented Jan 9, 2025

@Technerd-SG:

Back then I activated bridge mode on my MU5001, but I can't remember the options as I wasn't able to use bridge mode via USB with my Fritzbox. Sorry.

@Nico1788
Copy link

Nico1788 commented Jan 9, 2025

@Technerd-SG
these are the settings you can get
Immagine 2025-01-09 135434

@Gianvix11
Copy link

I have a MC888A Ultra Software Version: BD_ATMC888AULTRAV1.0.0B17
hardware: MC888AULTRA_HW1.0
How can i use this script?

@tpoechtrager
Copy link
Author

tpoechtrager commented Jan 9, 2025 via email

@Gianvix11
Copy link

I have copy/paste protection in Edge...

@tpoechtrager
Copy link
Author

I have copy/paste protection in Edge...

Edge isn't supported by the script. It may or may not work.

A quick google search revealed this: https://www.qpidi.com/post/disable-paste-protection-in-edge-devtools-qpidi

@Gianvix11
Copy link

It Works! Even on Edge. Thanks!

@zivcex
Copy link

zivcex commented Feb 24, 2025

The script works but it asks me to login as a developer on MF296R. Any info on this login?

@MiG-41
Copy link

MiG-41 commented Feb 24, 2025

On MC889A Pro , PCI's on SCC bands (but only on LTE) are converted HEX to DEC :
image

While all shouldhave 100 value:
image

@HannesOberreiter
Copy link

Thanks for the great script! But still no luck with my ZTE MC888A to set the DNS (want to get PiHole working).

The hidden options reveal DNS options in the APN settings but they are not saved.

Any ideas how I can setup DNS (or at least a custom DHCP server) for my PiHole and the MC888A?

Cheers
Hannes

@HannesOberreiter
Copy link

Ok finally found a solutions without manipulating the js files directly, you may want to add this function. With this flag set it now saves the APN DNS, at least for my ZTE MC888A A1 branded one.

/* After unlocking you have switch hash pages if you are currently on the #apn_setting */
function unlockApnDns(){
 require.s.contexts._.defined["config/config"].SHOW_APN_DNS = true;
}

image

@tpoechtrager
Copy link
Author

tpoechtrager commented Mar 20, 2025 via email

@HannesOberreiter
Copy link

A PR is not possible for a gist file. Or do you mean I should make my own fork?

@tpoechtrager
Copy link
Author

tpoechtrager commented Mar 20, 2025 via email

@danmelmod
Copy link

danmelmod commented Apr 8, 2025

Hi,

Great script! I used to get good signals for the n78+b7 bands on all my external antennas (x3 xpol v3). I miss one thing though and it is multiple LTE cell lock. I can only lock one band with "cell lock "on the mc888 ultra and that have an negative affect on my bandwidth. I would like to lock multiple bands (like it is possible on the the zyxel nr5301e)

My optimal configuration would be b7+b7+b3+n78. If i cell lock a single b7 i would loose around 20Mhz in download speed. Cause the router will then not dubble connect the second b7 band. I am using the mc888 ultra in bridgemode connected to RBR850

Below pic from webinterface is caused by buggy telenor firmware channel width is 100Mhz+20Mhz+20Mhz during load.

Skärmbild 2025-04-08 163430
settings
speedb7b7n78

@MiG-41
Copy link

MiG-41 commented Apr 8, 2025

Generally ZTE modems can't do mulitple lockcell , Zyxel is probably based on quectell modem , and there is possible.

@MlgmXyysd
Copy link

No longer work for ZTE U60 Pro MU5250: GET http://192.168.0.1/goform/goform_get_cmd_process?cmd=wa_inner_version 404 (Not Found)
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment