Speedtouch Provision fail on ADSL


Having a weird one with a Technicolor DWA0120 router.

Provisions fine when connected to an FTTC line but when plugged into an ADSL it fails

Working log on a FTTC Line.
2019-07-03T21:19:55.671Z [INFO] 000E50-DWA0120-CP1915AD70S: Script: Setting un: 01670812351@zonetelecom.co.uk, pw: e772c5e031
2019-07-03T21:19:55.672Z [INFO] 000E50-DWA0120-CP1915AD70S: Script: Done configuring. Setting provisioned tag
2019-07-03T21:19:55.681Z [INFO] 000E50-DWA0120-CP1915AD70S: ACS request; acsRequestId=“16bb9b54d840001” acsRequestName=“GetParameterValues”
2019-07-03T21:19:55.934Z [INFO] 000E50-DWA0120-CP1915AD70S: ACS request; acsRequestId=“16bb9b54d840002” acsRequestName=“SetParameterValues”

When on an adsl line
2019-07-03T21:09:54.908Z [INFO] 000E50-DWA0120-CP1915AD70S: Script: Setting un: 01670812351@zonetelecom.co.uk, pw: e772c5e031
2019-07-03T21:09:54.909Z [INFO] 000E50-DWA0120-CP1915AD70S: Script: Done configuring. Setting provisioned tag
2019-07-03T21:09:54.915Z [INFO] 000E50-DWA0120-CP1915AD70S: ACS request; acsRequestId=“16bb9ac233a0000” acsRequestName=“GetParameterValues”
2019-07-03T21:09:55.183Z [INFO] 000E50-DWA0120-CP1915AD70S: ACS request; acsRequestId=“16bb9ac233a0001” acsRequestName=“SetParameterValues”
2019-07-03T21:09:55.473Z [WARN] 000E50-DWA0120-CP1915AD70S: CPE fault; acsRequestId=“16bb9ac233a0001” cpeFaultCode=“9003” cpeFaultString=“Invalid arguments”
2019-07-03T21:09:55.474Z [WARN] 000E50-DWA0120-CP1915AD70S: Channel has faulted; channel=“default” retries=0 faultCode=“cwmp.9003” faultMessage=“Invalid arguments”

Any ideas?

are you setting just two parameters (username and password)? or there are also other ones that you don’t log?

I suspect it is related to my problem (Send all parameters on the same setParametersValue RPC). Please activate debugging for this device and compare the two SPV (FTTC vs ADSL). Both of them send all the params you requested?

Hi Lavira

No its not related to your issue unfortunatly. I have done some more digging and it seems that although in the web interface you set the username/password in one place and will work no matter if your on ADSL or FTTC, in the ACS it has 2 different variables.

For ADSL its

for FTTC its

If I try and set both these at same time in provision it fails.

If I refresh the values of these 2 parameters, only the active one returns a value.

Does anyone know how to make the provision script check for which has a value and provision that one?

ah, in that case you should use wildcard or an alias filter (check the wiki https://github.com/genieacs/genieacs/wiki/Provisions), something like:
declare(‘InternetGatewayDevice.WANDevice.1.WANConnectionDevice.*.WANPPPConnection.*.Username’, {value: Date.now()}, {value: ‘username’});

Ok that didnt work, as with a wildcard it tried to update both objects which caused the CPE to fail.

We got round this by using the following code in the provision to detect which one it was using.

let device1 = declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1.Username”, {value: now}).value[0];
if (device1) {
log(‘Provisiong Device type 1’);
declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1.Username”, {value: now}, {value: config.username});
declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANPPPConnection.1.Password”, {value: now}, {value: config.password});
let device2 = declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.2.WANPPPConnection.1.Username”, {value: now}).value[0];
if (device2) {
log(‘Provisioning Device type2’);
declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.2.WANPPPConnection.1.Username”, {value: now}, {value: config.username});
declare(“InternetGatewayDevice.WANDevice.1.WANConnectionDevice.2.WANPPPConnection.1.Password”, {value: now}, {value: config.password});
let device3 = declare(“InternetGatewayDevice.WANDevice.2.WANConnectionDevice.1.WANPPPConnection.1.Username”, {value: now}).value[0];
if (device3) {
log(‘Provisioning Device type3’);
declare(“InternetGatewayDevice.WANDevice.2.WANConnectionDevice.1.WANPPPConnection.1.Username”, {value: now}, {value: config.username});
declare(“InternetGatewayDevice.WANDevice.2.WANConnectionDevice.1.WANPPPConnection.1.Password”, {value: now}, {value: config.password});
declare(“InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.SSID”, {value: now}, {value: config.wifissid});
declare(“InternetGatewayDevice.LANDevice.1.WLANConfiguration.1.KeyPassphrase”, {value: now}, {value: config.wifipass});

//Refresh the vParams
declare("VirtualParameters.pppoeUsername", {value: now});


Hope it helps anyone else in similar issues.

@lavira, you need to specify the object with a . at the end like:

Furthermore i would advice you to perform a GPV on object parameter InternetGatewayDevice.fayer3forwarding.

to define where you want to set your username.