feat: full GenieACS config export (provisions, ext scripts, fleet data)

Complete backup of all GenieACS ACS configuration:
- 24 provision scripts (default, inform, bootstrap, firmware upgrades,
  per-model configs for HT803G, HT502, HT812, Deco, XX230v, XX430v, XX530v)
- 25 presets (trigger rules mapping events to provisions)
- 6 ext scripts (provisioning.js, wifi.js, voip.js — query MariaDB
  for per-device WiFi SSID/password and VoIP credentials)
- 12 firmware images catalogued (HT502, HG8245, HT803G-W/WS2, HT812, Deco)
- 7,550 device fleet snapshot (4,035 online, 53.4% online rate)
- GenieACS env config (MongoDB at 10.5.2.116, ext dir, JWT secret)

Fleet breakdown:
- Device2 (TP-Link Deco): 4,051 units (74% online) — bulk of fleet
- HT803G (Raisecom): 2,833 units (33% online) — legacy ONTs
- DISCOVERYSERVICE: 156 ghost entries (0% online)
- Grandstream phones: GXP2130/2160/1630, HT502/812

Key finding: ext scripts use MariaDB (10.5.14.21) for WiFi/VoIP
provisioning data (SSID, passwords, SIP credentials per serial).
This data must be migrated to ERPNext or a new provisioning DB
for Oktopus.

Custom fork: @genieacs/genieacs-targo v1.2.8-targo.3

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
louispaulb 2026-04-02 21:08:51 -04:00
parent 56ad97bc71
commit 8ba73251f3
12 changed files with 7849 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,34 @@
const mariadb = require('mariadb/callback');
//const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.100.80.100";
const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.5.14.21";
const MARIADB_USER = process.env["GENIEACS_MARIADB_USER"] || "genieacs";
const MARIADB_PASS = process.env["GENIEACS_MARIADB_PASS"] || "DnZHC3XezD7A8keEtaUocqPw";
const conn = mariadb.createConnection({host: MARIADB_HOST, user: MARIADB_USER, password: MARIADB_PASS});
function getWifi(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.wifi where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, ssid: r.ssid, password: r.password, enable: r.enable})));
});
}
/*function getVoip(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.voip where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, username: r.username, password: r.password, enable: r.enable})));
});
}*/
exports.getWifi = getWifi;
//exports.getVoip = getVoip;
/*
getWifi(["74DA88D3FEC4"], (err, res) => {
console.dir(err);
console.dir(res);
});
*/

View File

@ -0,0 +1,34 @@
const mariadb = require('mariadb/callback');
//const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.100.80.100";
const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.5.14.21";
const MARIADB_USER = process.env["GENIEACS_MARIADB_USER"] || "genieacs";
const MARIADB_PASS = process.env["GENIEACS_MARIADB_PASS"] || "DnZHC3XezD7A8keEtaUocqPw";
const conn = mariadb.createConnection({host: MARIADB_HOST, user: MARIADB_USER, password: MARIADB_PASS});
function getWifi(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.wifi where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, ssid: r.ssid, password: r.password, enable: r.enable})));
});
}
/*function getVoip(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.voip where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, username: r.username, password: r.password, enable: r.enable})));
});
}*/
exports.getWifi = getWifi;
//exports.getVoip = getVoip;
/*
getWifi(["74DA88D3FEC4"], (err, res) => {
console.dir(err);
console.dir(res);
});
*/

View File

@ -0,0 +1,33 @@
const mariadb = require('mariadb/callback');
const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.100.80.100";
const MARIADB_USER = process.env["GENIEACS_MARIADB_USER"] || "genieacs";
const MARIADB_PASS = process.env["GENIEACS_MARIADB_PASS"] || "DnZHC3XezD7A8keEtaUocqPw";
const conn = mariadb.createConnection({host: MARIADB_HOST, user: MARIADB_USER, password: MARIADB_PASS});
function getWifi(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.wifi where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, ssid: r.ssid, password: r.password, enable: r.enable})));
});
}
function getVoip(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.wifi where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, username: r.username, password: r.password, enable: r.enable})));
});
}
exports.getWifi = getWifi;
exports.getVoip = getVoip;
/*
getWifi(["74DA88D3FEC4"], (err, res) => {
console.dir(err);
console.dir(res);
});
*/

View File

@ -0,0 +1,83 @@
// va chercher les arguments, strips les deux premieres entre par defaut
args = process.argv.slice(2);
// met le premier arguments dans la variable arg et le second dans extFunction
serial = args[0];
extFunction = args[1];
// fait pointe la variable sur le script externe de Zaid
//let provisioningData = require('/opt/genieacs/ext/provisioning.js');
if ( extFunction == "getWifi" ) {
let provisioningData = require('/opt/genieacs/ext/wifi.js');
provisioningData[extFunction](args,function(err, res){
if (err != null) {
console.log(err);
process.exit();
} else {
const wifiList = res
let i = 0;
let w = 1;
// verifie si le retour est vide mais vérifie la première valeur du array car le retour contient au minimum les braquets du json
if ( wifiList[i] ) {
// passe en boucle tout les entrees reçu dans wifiList
const wifiListLength = wifiList.length
//console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*=path:"+wifiListLength);
while ( i < wifiListLength ) {
// desactive l'instance s'il y a une ou des informations manquante ou si desactive
if ( !wifiList[i].enable || !wifiList[i].ssid || !wifiList[i].password || wifiList[i].enable == 0 ) {
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.${"+w+"}.Enable=false");
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*.instance}.SSID=ssidDisabledByACS");
console.log("")
} else {
// active l'instance et inscrit le ssid ainsi que le mot de passe
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.${"+w+"}.Enable=true");
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.${"+w+"}.SSID="+wifiList[i].ssid);
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.${"+w+"}.PreSharedKey="+wifiList[i].password);
console.log("")
}
i++
w++
}
// desactive tout les instances wifi si vide
} else {
//console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*=path:1");
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*.RadioEnabled=false");
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*.Enable=false");
console.log("InternetGatewayDevice.LANDevice.1.WLANConfiguration.*.instance}.SSID=radioDisabledByACS");
}
}
process.exit();
})
} else if ( extFunction == "getVoip" ) {
let provisioningData = require('/opt/genieacs/ext/voip.js');
provisioningData[extFunction](args,function(err, res){
if (err != null) {
console.log(err);
process.exit();
} else {
const voipList = res
let i = 0;
let v = 1;
if ( voipList[i] ) {
const voipListLength = voipList.length;
while ( i < voipListLength ) {
if ( !voipList[i].enable || !voipList[i].username || !voipList[i].password || voipList[i].enable == 0 ) {
console.log("InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line."+v+".Enable = Disabled");
} else {
console.log("InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line."+v+".Enable = Enabled");
console.log("InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line."+v+".SIP.AuthUserName = "+voipList[i].username);
console.log("InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line."+v+".SIP.AuthPassword = "+voipList[i].password);
}
i++;
v++;
}
} else {
console.log("InternetGatewayDevice.Services.VoiceService.1.VoiceProfile.1.Line.*.Enable = Disabled");
}
}
process.exit();
})
} else {
console.log("unknow fonction")
process.exit();
}

View File

@ -0,0 +1,17 @@
const mariadb = require('mariadb/callback');
//const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.100.80.100";
const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.5.14.21";
const MARIADB_USER = process.env["GENIEACS_MARIADB_USER"] || "genieacs";
const MARIADB_PASS = process.env["GENIEACS_MARIADB_PASS"] || "DnZHC3XezD7A8keEtaUocqPw";
const conn = mariadb.createConnection({host: MARIADB_HOST, user: MARIADB_USER, password: MARIADB_PASS});
function getVoip(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.voip where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, username: r.username, password: r.password, enable: r.enable})));
});
}
exports.getVoip = getVoip;

View File

@ -0,0 +1,17 @@
const mariadb = require('mariadb/callback');
//const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.100.80.100";
const MARIADB_HOST = process.env["GENIEACS_MARIADB_HOST"] || "10.5.14.21";
const MARIADB_USER = process.env["GENIEACS_MARIADB_USER"] || "genieacs";
const MARIADB_PASS = process.env["GENIEACS_MARIADB_PASS"] || "DnZHC3XezD7A8keEtaUocqPw";
const conn = mariadb.createConnection({host: MARIADB_HOST, user: MARIADB_USER, password: MARIADB_PASS});
function getWifi(args, callback) {
const serial = args[0];
conn.query(`select * from genieacs.wifi where serial = ?`, [serial], (err, res) => {
if (err) return callback(err);
callback(null, res.map(r => ({instance: r.instance, ssid: r.ssid, password: r.password, enable: r.enable})));
});
}
exports.getWifi = getWifi;

View File

@ -0,0 +1,14 @@
[
{"_id":"ht502fw.bin","length":3627962,"chunkSize":261120,"uploadDate":"2020-02-28T06:40:27.225Z","filename":"ht502fw.bin","md5":"7ead02669a63662ea4f4df08e7b5fdb8","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000B82","productClass":"HT-502","version":"1.0.12.1"}},
{"_id":"HG8245V100R006C00SPC205_full_all.bin","length":14253074,"chunkSize":261120,"uploadDate":"2020-02-29T15:33:02.373Z","filename":"HG8245V100R006C00SPC205_full_all.bin","md5":"7a8cd3a2dcb117977f64336b79150f80","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"00259E","productClass":"HG8245","version":"V100R006C00SPC205"}},
{"_id":"20200527191050_ISCOMHT803G-W_T_GJ01_SYSTEM_3.10.11_20200527","length":10127424,"chunkSize":261120,"uploadDate":"2021-01-14T14:51:46.436Z","filename":"20200527191050_ISCOMHT803G-W_T_GJ01_SYSTEM_3.10.11_20200527","md5":"857e97478f0c5cc642f89d0092a456bf","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"","productClass":"HT803G-W","version":"3.10.11"}},
{"_id":"ht81xfw.bin","length":7623304,"chunkSize":261120,"uploadDate":"2021-04-13T17:37:19.932Z","filename":"ht81xfw.bin","md5":"72259df47e4932e584f840605a044f02","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000B82","productClass":"HT812","version":"1.0.19.11"}},
{"_id":"ISCOMHT803G-W_T_GJ01_SYSTEM_3.10.13_20200831","length":10137664,"chunkSize":261120,"uploadDate":"2021-05-18T18:42:52.284Z","filename":"ISCOMHT803G-W_T_GJ01_SYSTEM_3.10.13_20200831","md5":"ead176b0da343c53dcbdcda661a50483","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"","productClass":"HT803G-W","version":"3.10.13"}},
{"_id":"BETA_m4r-SP1-up-ver2-4-0-P1[20210520-rel77456]_2021-05-20_21.31.27.bin","length":12425980,"chunkSize":261120,"uploadDate":"2021-11-30T13:31:51.375Z","filename":"BETA_m4r-SP1-up-ver2-4-0-P1[20210520-rel77456]_2021-05-20_21.31.27.bin","md5":"c5e5d73dbeb107d9742a7fcc61c30c06","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"403F8C","productClass":"Device 2","version":"2.4.0 Build 20210520 Rel. 77456"}},
{"_id":"20211011152242_ISCOMHT803G-WS2_M_GJ01_SYSTEM_MWI_20211011.bin","length":33374996,"chunkSize":261120,"uploadDate":"2021-12-07T15:15:24.153Z","filename":"20211011152242_ISCOMHT803G-WS2_M_GJ01_SYSTEM_MWI_20211011.bin","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000E5E","productClass":"HT803G-WS2","version":"3.90.42.20211011"}},
{"_id":"20211011152242_ISCOMHT803G-WS2_M_GJ01_SYSTEM_MWI_202110111.bin","length":33374996,"chunkSize":261120,"uploadDate":"2022-02-15T15:23:07.561Z","filename":"20211011152242_ISCOMHT803G-WS2_M_GJ01_SYSTEM_MWI_202110111.bin","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000E5E","productClass":"HT803G-WS2","version":"3.90.71"}},
{"_id":"ISCOMHT803G-W_T_GJ01_SYSTEM_3_10.15_20210222","length":10260544,"chunkSize":261120,"uploadDate":"2022-06-27T18:22:16.012Z","filename":"ISCOMHT803G-W_T_GJ01_SYSTEM_3_10.15_20210222","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"","productClass":"HT803G-W","version":"3.10.15"}},
{"_id":"ht502fw10162.bin","length":3852518,"chunkSize":261120,"uploadDate":"2022-07-08T15:39:02.643Z","filename":"ht502fw10162.bin","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000B82","productClass":"HT502","version":"1.0.16.2"}},
{"_id":"HT803G-WS2_M_GJ01_MWI_SYSTEM_3.90.85_20220818.bin","length":33386927,"chunkSize":261120,"uploadDate":"2022-09-12T19:22:29.247Z","filename":"HT803G-WS2_M_GJ01_MWI_SYSTEM_3.90.85_20220818.bin","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000E5E","productClass":"HT803G-WS2","version":"3.90.85_20220817"}},
{"_id":"20221109142502_MSGHT803G_SYSTEM.bin","length":33383546,"chunkSize":261120,"uploadDate":"2022-11-11T20:10:46.074Z","filename":"20221109142502_MSGHT803G_SYSTEM.bin","metadata":{"fileType":"1 Firmware Upgrade Image","oui":"000E5E","productClass":"HT803G-WS2","version":"3.90.85.20221111"}}
]

View File

@ -0,0 +1,12 @@
#GENIEACS_MONGODB_CONNECTION_URL=mongodb://127.0.0.1:27017/genieacs
GENIEACS_MONGODB_CONNECTION_URL=mongodb://10.5.2.116:27017/genieacs
GENIEACS_CWMP_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-cwmp-access.log
GENIEACS_NBI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-nbi-access.log
GENIEACS_FS_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-fs-access.log
GENIEACS_UI_ACCESS_LOG_FILE=/var/log/genieacs/genieacs-ui-access.log
GENIEACS_DEBUG_FILE=/var/log/genieacs/genieacs-debug.yaml
#NODE_OPTIONS=--enable-source-maps
GENIEACS_EXT_DIR=/opt/genieacs/ext
GENIEACS_UI_JWT_SECRET=DtF4kwC5hsb8bDJNCzKZbwYk
#GENIEACS_XMPP_JID=acs@xmpp.targointernet.com
#GENIEACS_XMPP_PASSWORD=m7iDHz9kjnnNkp

View File

@ -0,0 +1,27 @@
[
{"_id":"bootstrap","weight":100,"channel":"bootstrap","events":{"0 BOOTSTRAP":true},"precondition":"NOT DeviceID.ProductClass = \"DISCOVERYSERVICE\"","configurations":[{"type":"provision","name":"bootstrap","args":null}]},
{"_id":"default","weight":90,"channel":"default","precondition":"NOT DeviceID.ProductClass = \"DISCOVERYSERVICE\"","events":{},"configurations":[{"type":"provision","name":"default","args":null}]},
{"_id":"inform","weight":0,"channel":"inform","precondition":"NOT DeviceID.ProductClass = \"DISCOVERYSERVICE\"","events":{},"configurations":[{"type":"provision","name":"inform","args":null}]},
{"_id":"firmware-upgrade-ht502","channel":"firmware-upgrade","precondition":"DeviceID.ProductClass = \"HT-502\" AND Device.DeviceInfo.SoftwareVersion <> \"1.0.12.1\"","weight":0,"events":{"1 BOOT":true},"configurations":[{"type":"provision","name":"firmware-upgrade","args":["ht502fw.bin"]}]},
{"_id":"firmware-upgrade-ht812","channel":"firmware-upgrade","precondition":"DeviceID.ProductClass = \"HT812\" AND Device.DeviceInfo.SoftwareVersion <> \"1.0.9.3\"","weight":0,"events":{"1 BOOT":true},"configurations":[{"type":"provision","name":"firmware-upgrade","args":["ht81xfw.bin"]}]},
{"_id":"reboot","events":{"7 TRANSFER COMPLETE":true},"precondition":"","weight":0,"configurations":[{"type":"provision","name":"reboot","args":null}]},
{"_id":"bootstrap_raisecom_hgu","precondition":"DeviceID.ProductClass = \"HT803G-W\"","channel":"bootstrap","weight":0,"events":{"0 BOOTSTRAP":true},"configurations":[{"type":"provision","name":"bootstrap_raisecom_hgu","args":null}]},
{"_id":"HT803G-W_inform","channel":"inform","weight":10,"precondition":"DeviceID.ProductClass = \"HT803G-W\"","events":{},"configurations":[{"type":"provision","name":"HT803G-W_inform","args":null}]},
{"_id":"firmware-upgrade-ht803-w","channel":"firmware-upgrade","weight":0,"events":{"1 BOOT":true},"precondition":"DeviceID.ProductClass = \"HT803G-W\" AND InternetGatewayDevice.DeviceInfo.SoftwareVersion <> \"3.10.13\"","configurations":[{"type":"provision","name":"firmware-upgrade-HT803G","args":["ISCOMHT803G-W_T_GJ01_SYSTEM_3.10.13_20200831"]}]},
{"_id":"HT502_inform","channel":"inform","weight":0,"precondition":"DeviceID.ProductClass = \"HT-502\"","events":{},"configurations":[{"type":"provision","name":"HT502","args":null}]},
{"_id":"HT812_inform","channel":"inform","weight":0,"precondition":"DeviceID.ProductClass = \"HT812\"","events":{},"configurations":[{"type":"provision","name":"HT812","args":null}]},
{"_id":"Deco-Bootstrap","channel":"bootstrap","events":{"0 BOOTSTRAP":true},"precondition":"false AND DeviceID.ProductClass = \"Device 2\"","weight":0,"configurations":[{"type":"provision","name":"Deco-Bootstrap","args":null}]},
{"_id":"Deco-Inform","channel":"Inform","precondition":"DeviceID.ProductClass = \"Device 2\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"Deco-Inform","args":null}]},
{"_id":"Deco-Patch-Enable-SSID","precondition":"DeviceID.ID = \"403F8C-Device%202-403F8CF47930\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"Deco-Patch-Enable-SSID","args":null}]},
{"_id":"HT803G-WS2_inform","precondition":"DeviceID.ProductClass = \"HT803G-WS2\" AND NOT DeviceID.ID = \"000E5E-HT803G%2DWS2-CCC2E02T3FACCC2E03DD89C\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"HT803G-WS2_inform","args":null}]},
{"_id":"firmware-upgrade-Deco","precondition":"false AND DeviceID.ProductClass = \"Device 2\" AND Device.DeviceInfo.SoftwareVersion <> \"2.4.0 Build 20210520 Rel. 77456\" AND DeviceID.ID = \"403F8C-Device%202-403F8CF4B858\"","events":{"1 BOOT":true},"weight":0,"channel":"firmware-upgrade","configurations":[{"type":"provision","name":"firmware-upgrade","args":["BETA_m4r-SP1-up-ver2-4-0-P1[20210520-rel77456]_2021-05-20_21.31.27.bin"]}]},
{"_id":"firmware-upgrade-HT803G-WS2","channel":"firmware-upgrade","weight":200,"events":{"1 BOOT":true},"precondition":"DeviceID.ProductClass = \"HT803G-WS2\" AND InternetGatewayDevice.DeviceInfo.SoftwareVersion <> \"3.90.85\" AND InternetGatewayDevice.DeviceInfo.SoftwareVersion <> \"3.90.79\"","configurations":[{"type":"provision","name":"firmware-upgrade","args":["HT803G-WS2_M_GJ01_MWI_SYSTEM_3.90.85_20220818.bin"]}]},
{"_id":"Deco-Host","events":{},"channel":"inform","precondition":"false AND DeviceID.SerialNumber = \"CC32E50F5BE0\"","weight":0,"configurations":[{"type":"provision","name":"Deco-Host","args":null}]},
{"_id":"xx230v_inform","channel":"inform","precondition":"DeviceID.ProductClass = \"Device2\" AND Device.DeviceInfo.ModelName = \"XX230v\" AND NOT Device.DeviceInfo.X_TP_MACAddress LIKE \"%CF:AD:2F:30\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"xx230v_inform","args":null}]},
{"_id":"xx230v_boot","channel":"boot","events":{"1 BOOT":true},"precondition":"DeviceID.ProductClass = \"Device2\" AND Device.DeviceInfo.ModelName = \"XX230v\"","weight":0,"configurations":[{"type":"provision","name":"xx230v_boot","args":null}]},
{"_id":"HT803G-W_inform_upnp","channel":"inform","precondition":"DeviceID.ProductClass = \"HT803G-W\" AND Tags.upnp_auto IS NULL","weight":0,"events":{},"configurations":[{"type":"provision","name":"HT803-W_inform_upnp","args":null}]},
{"_id":"xx530v_inform","channel":"inform","precondition":"DeviceID.ProductClass = \"XX530v\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"xx530v_inform","args":null}]},
{"_id":"DISCOVERYSERVICE","precondition":"DeviceID.ProductClass = \"DISCOVERYSERVICE\"","weight":10,"channel":"DISCOVERYSERVICE","events":{},"configurations":[{"type":"provision","name":"reboot","args":null}]},
{"_id":"xx430v_inform","channel":"inform_xx430v","precondition":"DeviceID.ProductClass = \"XGB430v_Pro\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"xx430v_inform","args":null}]},
{"_id":"XX230v_inform_TpLink_fix","channel":"inform","precondition":"Device.DeviceInfo.X_TP_MACAddress LIKE \"%CF:AD:2F:30\"","weight":0,"events":{},"configurations":[{"type":"provision","name":"XX230v_inform_TpLink_fix","args":null}]}
]

File diff suppressed because one or more lines are too long