faultCode: “9003”
faultString: Invalid arguments
setParameterValuesFault:
- parameterName: InternetGatewayDevice.ManagementServer.PeriodicInformTime
faultCode: “9007”
faultString: Invalid parameter value
faultCode: “9003”
faultString: Invalid arguments
setParameterValuesFault:
You didn’t show what value you are trying to set, but values in the 9000 range are all CPE faults. In this case, the CPE is telling you the value you are trying to set is invalid.
how to check that range value.?
how to check that range value.?
yes!
Well, it would probably help if you posted the exact script/preset/provision/data you are trying to send to the CPE.
// Device ID as user name
const username = declare(“DeviceID.ID”, {value: 1}).value[0]
// Password will be fixed a given device because Math.random() is seeded with devcie ID by default.
const password = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER).toString(36);
const informInterval = 300;
// Refresh values daily
const daily = Date.now(86400000);
// Unique inform offset per device for better load distribution
const informTime = daily % 86400000;
declare(“InternetGatewayDevice.ManagementServer.ConnectionRequestUsername”, {value: daily}, {value: username});
declare(“InternetGatewayDevice.ManagementServer.ConnectionRequestPassword”, {value: daily}, {value: password});
declare(“InternetGatewayDevice.ManagementServer.PeriodicInformEnable”, {value: daily}, {value: true});
declare(“InternetGatewayDevice.ManagementServer.PeriodicInformInterval”, {value: daily}, {value: informInterval});
declare(“InternetGatewayDevice.ManagementServer.PeriodicInformTime”, {value: daily}, {value: informTime});
declare(“Device.ManagementServer.ConnectionRequestUsername”, {value: daily}, {value: username});
declare(“Device.ManagementServer.ConnectionRequestPassword”, {value: daily}, {value: password});
declare(“Device.ManagementServer.PeriodicInformEnable”, {value: daily}, {value: true});
declare(“Device.ManagementServer.PeriodicInformInterval”, {value: daily}, {value: informInterval});
declare(“Device.ManagementServer.PeriodicInformTime”, {value: daily}, {value: informTime});
const hourly = Date.now(3600000);
// Refresh basic parameters hourly
declare(“InternetGatewayDevice.DeviceInfo.HardwareVersion”, {path: hourly, value: hourly});
declare(“InternetGatewayDevice.DeviceInfo.SoftwareVersion”, {path: hourly, value: hourly});
declare(“InternetGatewayDevice.WANDevice..WANConnectionDevice..WANIPConnection..MACAddress", {path: hourly, value: hourly});
declare("InternetGatewayDevice.WANDevice..WANConnectionDevice..WANIPConnection..ExternalIPAddress”, {path: hourly, value: hourly});
declare(“InternetGatewayDevice.LANDevice..WLANConfiguration..SSID”, {path: hourly, value: hourly});
// Don’t refresh password field periodically because CPEs always report blank passowrds for security reasons
declare(“InternetGatewayDevice.LANDevice..WLANConfiguration..KeyPassphrase”, {path: hourly, value: 1});
declare(“InternetGatewayDevice.LANDevice..Hosts.Host..HostName”, {path: hourly, value: hourly});
declare(“InternetGatewayDevice.LANDevice..Hosts.Host..IPAddress”, {path: hourly, value: hourly});
declare(“InternetGatewayDevice.LANDevice..Hosts.Host..MACAddress”, {path: hourly, value: hourly});
I’d suggest reading the specification. The CPE is correctly throwing a fault given that you sending bad data to the CPE.
Umm, your hardware ver, software ver, mac address, etc will not be changing hourly. The parameters in the DeviceInfo struct are sent to the CPE on every inform.
The path value of the second parameter is how old the path can be before GenieACS will refresh the path. This is almost certainly not needed for things like WLANConfiguration. The CPE isn’t adding/removing radios on a whim. You are going to have performance issues if you do this across all the devices in your network.
Is there a need to refresh the Hosts? Especially hourly? I only refresh those values on demand, never preemptively.
No there is not the need of the
// Refresh basic parameters hourly.
What models are you talking about? Is the bug related to any parameter sent by declare() or just the periodicInform as the names of the variables suggest? We are using three models of HW but so far the only errors we have are (IMHO) related to physical problems (session_terminated is the most frequent). Also there’s a catch: we don’t use PeriodicInform. Instead I have a bash script process executed once a week, which reads the entire list of CPE and calls them one by one – and it’s just a CONN_REQUEST.
ty
My bad I confused the model with a similar ZTE CPE. I have both in my plan and both have similar bugs. I cant edit the comment anymore so I deleted it.
About the problem on Huawei’s CPEs I’ve only looked at the surface of it. I’ve tested several values on a Huawei EG8145V5 and still haven’t found a pattern for the bug.
I was getting this problem with ztes CPEs seemly randomly (models: ZXHN H199A and ZXHN H198A). This was a pain because a significant portion of my network was not being balanced.
Manually debugging the value I found out that most of the ZTE CPEs I have in my plant have a bug. When prompted with a timestamp with a 0 at any position past the decimal point the CPE will return an invalid value error.
I wrote a small function to get rid of any decimal zeroes in a timestamp that fixed the problem.
function zteFriendlyTime(){
const daily = Date.now(86400000);
const rawInformTIme = (daily % 86400000) + 1000
// This will generate a timestam wen converted to datetime akin to 2022-11-11T20:11:49.000Z
const informTimeWithoutMiliseconds = Math.floor(rawInformTIme/1000)
const tenth = ((Math.floor(rawInformTIme/100) % 9) + 1) * 100
const hundreth = ((Math.floor(rawInformTIme/10) % 9) + 1) * 10
const tousandth = (rawInformTIme % 9) + 1
return informTimeWithoutMiliseconds + tenth + hundreth + tousandth
}