Can a provision (script) be run on-demand/manually, without linking to device preset

Here is my use-case.

  • need a script that writes 10 parameter values to the device
  • want to run this script manually/on-demand. In other words, the running of this script is not triggered by the receipt of some TR-069 event (preset) from device such as boot, bootstrap or periodic inform.
  • want to trigger this script from within GenieACS UI.

The script/provision itself will be very straight-forward. My difficulty is how to trigger it manually. I do not want this script to run automatically after genieacs receives some device event such as boot, bootstrap.

I know that a bunch of parameters can written via a external app that using Genieacs NBI. However, I do not want to run write an external app that call’s genieacs’ NBI.

So in summary can be script (provision) be triggered manually by end-user rather than by the device?

In order to request or set a parameter via TR069 you need to have a session established and this can only be initiated by the device, based on some event. The ACS can only force a connection request event and this can be done from the UI using the “Commit” button or “Summon” AFAIK.

To manually trigger a provision script you could set a preset to execute it if a custom tag is present and when you want to trigger it, you just add the tag and do a connection request (try to refresh a parameter and hit Commit). PS: you also need to remove the tag at the end of the provision

Or you could try to execute all the code inside a virtual parameter … that way, when you refresh/change it and hit commit it will execute the code and you can skip the tag and present but i’m not 100% sure it will work as expected.

Maybe in a future version of the UI it will be possible to add a device action button to manually trigger the execution of a provision but in this one I don’t think it’s possible without patching the code.

Hi Lavira. Thanks for your suggestions.
I decided to do with your Virtual parameter suggestion as a means for settings multiple parameters in the device on-demand by the end-user.

However, my Virtual Parameter is not sending “SetParameterValue” to the device.

This is the Virtual parameter I created named VPdhcp:
/------------
// Example: Create an editable virtual parameter for DHCP
log(“VPdhcp entered”);
let m = “”;
const now = Date.now();

declare(“InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPLeaseTime”, {value: now}, {value: 78000});
declare(“InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.MinAddress”, {value: now}, {value: “192.168.1.60”});
declare(“InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.MaxAddress”, {value: now}, {value: “192.168.1.250”});

return {writable: false, value: [m, “xsd:string”]};
/--------------

I can view and set each of the three parameters successfully if I do it one by one manually. This proves that there is no “ConnectionRequest” issue or device issue.

However when I refresh/commit the “VirtualParameters.VPdhcp”, the three parameters listed within this virtual parameter do not get set in the device. This is “genieacs-cwmp-access” log that’s generated when the virtual parameter is refreshed:
/—

2020-07-10T02:29:03.614Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Inform; cpeRequestId=“1477014812” informEvent=“6 CONNECTION REQUEST” informRetryCount=0
2020-07-10T02:29:03.732Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Script: Refresh_VParams provision entered
2020-07-10T02:29:03.733Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Script: Inform Event received
2020-07-10T02:29:03.751Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Script: VPdhcp entered
2020-07-10T02:29:03.767Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: ACS request; acsRequestId=“173368e02290100” acsRequestName=“GetParameterValues”
2020-07-10T02:29:03.803Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Script: Refresh_VParams provision entered
2020-07-10T02:29:03.804Z [INFO] 192.168.18.10 9C50EE-A%2D240Z%2DA-ALCLF84FFFED: Script: Inform Event received
/—
Notice that there “SetParameterValues” is not sent. Only GetParameterValues is present

Here is a snippet of the TR-069 log from the device after the above operation:
/–
<soap-env:Envelope xmlns:soap-env=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:soap-enc=“http://schemas.xmlsoap.org/soap/encoding/” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance” xmlns:cwmp=“urn:dslforum-org:cwmp-1-0”>
soap-env:Header
<cwmp:ID soap-env:mustUnderstand=“1”>1733697fcb70000</cwmp:ID>
</soap-env:Header>
soap-env:Body
cwmp:GetParameterValuesResponse


InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.DHCPLeaseTime
78120


InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.MaxAddress
192.168.1.251


InternetGatewayDevice.LANDevice.1.LANHostConfigManagement.MinAddress
192.168.1.61


</cwmp:GetParameterValuesResponse>
</soap-env:Body>
</soap-env:Envelope>
/–
So from the above we know that genie queries the device for the three parameters that are in the VPdhcp virtual parameter. We know that the values that the device returns for these parameters are different from the values that VPdhcp wants to set. Yet, genie does send a SetParameterValue for the three parameters that are inside the VPdhcp.

Notice that the last line in the VPdhcp is “return {writable: false, value: [m, “xsd:string”]};”. I tried changing “writeable:false” tp “writeable:true” but this did not make any difference.

So in summary, what could be the reason by genie is not sending SetParameterValue for the three parameters that are within the Virtual Parameter.

I am running Genie 1.2

Thanks for any tips!

try to define the virtual parameter as writable (see the “Create an editable virtual parameter for WPA passphrase” section from the docs, you need to have a if based on the args[1].value) and edit the current value.
Hope it will work :slight_smile:

It appears that I have an issue with a basic Virtual Parameter in my environment. I will create a separate post about it so as to not get confused with the topic of this post “can a provision(script) be run on-demand/manually”.