From 1b7c5775fb34a9f7f8b40ae31253136f19b22971 Mon Sep 17 00:00:00 2001 From: mschlgl Date: Thu, 25 Jul 2024 17:15:40 +0200 Subject: [PATCH 1/3] daily commit 20240725 mschlgl --- main.js | 173 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 137 insertions(+), 36 deletions(-) diff --git a/main.js b/main.js index ae773d3..48c73f4 100644 --- a/main.js +++ b/main.js @@ -567,32 +567,44 @@ class Extron extends utils.Adapter { this.setState('device.name', ext2, true); break; + case 'DSZ': + this.log.info(`onStreamData(): Phantom power status change from OID: "${ext1}" value: ${ext2}`); + break; + case 'DSM': // received a mute command case 'DSG': // received a gain level this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); this.setGain(command, ext1, ext2); break; - case 'DSD': //received a set source command - this.log.info(`onStreamData(): Extron got source ${command} from OID: "${ext1}" value: "${ext2}"`); - this.setSource(ext1, ext2); + case 'DSD': + if (ext1.startsWith('65')) { // delay value + this.log.info(`onStreamData(): Extron received delay value change from OID : "${ext1}" value "${ext2}samples"`); + } else { // input source control + this.log.info(`onStreamData(): Extron got source ${command} from OID: "${ext1}" value: "${ext2}"`); + this.setSource(ext1, ext2); + } break; - case 'DSE' : // dsp block status change + case 'DSE' : // DSP block status change this.log.info(`onStreamData(): Extron got a DSP block status change from OID : "${ext1}" value: "${ext2}"`); this.setDspBlockStatus(ext1, ext2); break; - case 'DST' : // dynamics threshold change - this.log.info(`onStreamData(): Extron got a threshold change from OID : "${ext1}" value: "${ext2}"`); - this.setDynamicsThreshold(ext1, ext2); - break; - - case 'DSY' : // DSP block type change 0=no dyn, 1=cmp, 2=lim, 3=gate, 4=agc + case 'DSY' : // DSP block type change 0=no, 1=cmp, 2=lim, 3=gate, 4=agc this.log.info(`onStreamData(): Extron received DSP block change from OID : "${ext1}" value "${ext2}"`); this.setDspBlockType(ext1, ext2); break; + case 'DST' : + if (ext1.startsWith('65')) { // delay temperature change + this.log.info(`onStreamData(): Extron got a delay ref temparature change from OID : "${ext1}" value: "${ext2}°F"`); + } else { // dynamics threshold change + this.log.info(`onStreamData(): Extron got a threshold change from OID : "${ext1}" value: "${ext2}"`); + this.setDynamicsThreshold(ext1, ext2); + } + break; + case 'DSA' : // dynamics attack this.log.info(`onStreamData(): Extron received attack time change from OID : "${ext1}" value "${ext2}"`); break; @@ -601,8 +613,13 @@ class Extron extends utils.Adapter { this.log.info(`onStreamData(): Extron received ratio change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSH' : // dynamics hold - this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); + case 'DSH' : + if (ext1.startsWith('400')) { // digital input gain level + this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); + this.setGain(command, ext1, ext2); + } else { // dynamics hold + this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); + } break; case 'DSL' : // dynamics release @@ -616,13 +633,14 @@ class Extron extends utils.Adapter { case 'DSU' : // delay unit change 0=samples, 1=ms, 2=fuß, 3=m this.log.info(`onStreamData(): Extron received delay unit change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSF' : // DSP block frequency change + + case 'DSF' : // filter frequency change this.log.info(`onStreamData(): Extron received filter frequency change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSO' : // DSP block slope 0=6dB/O, 1=12dB/O ... 7=48dB/O + case 'DSO' : // filter slope 0=6dB/O, 1=12dB/O ... 7=48dB/O this.log.info(`onStreamData(): Extron received filter slope change from OID : "${ext1}" value "${6+(Number(ext2)*6)}dB/O"`); break; - case 'DSQ' : + case 'DSQ' : // filtr q-factor change this.log.info(`onStreamData(): Extron received filter Q-factor change from OID : "${ext1}" value "${Number(ext2)/1000}"`); break; case 'DSV' : // unsolicited volume/meter level @@ -1359,6 +1377,7 @@ class Extron extends utils.Adapter { const dante = (idArray[2] == 'dante' && !['available','connections'].includes(idArray[3])); const idType = !dante ?idArray[2]: idArray[4]; const grpId = Number(!dante ?idArray[3]: idArray[5]); + let source = {}; if (typeof baseId !== 'undefined' && baseId !== null) { // @ts-ignore @@ -1409,7 +1428,7 @@ class Extron extends utils.Adapter { default : this.log.warn(`getDeviceStatus(): idType "${idType}" unknown`); } */ - if (! ['device','info'].includes(idArray[2])) { // sections doesn't need to be handled here + if (! ['device','info'].includes(idArray[2])) { // sections don't need to be handled here switch (stateName) { case 'mute' : if (device === 'smd202') this.getMute(); @@ -1431,9 +1450,13 @@ class Extron extends utils.Adapter { case 'level' : if (device === 'smd202') this.getVol(); else if (idType ==='groups') this.getGroupLevel(grpId); - else this.getGainLevel(id); + else { + if ((source = await this.getStateAsync(baseId+'.source')) && (source.val > 0)) { + this.getDigGainLevel(id); + } else this.getGainLevel(id); + } break; - case 'level_db' : // doesn't need to be handled as already covere by level + case 'level_db' : // doesn't need to be handled as already covered by level break; case 'playmode' : @@ -1594,6 +1617,7 @@ class Extron extends utils.Adapter { * dev, lin, log (-1000 .. 120, 0 .. 1000, -100 .. 12) * devGain, linGain, logGain (-180 .. 800, 0 .. 1000, -18 .. 80) * devAux, linAux, logAux (-180 .. 240, 0.. 1000, -18 .. 24) + * devDig, linDig, logDig (-180 .. 240, 0.. 1000, -18 .. 24) * devTrim, linTrim, logTrim (-120 .. 120, 0 .. 1000, -12 .. 12) * devAtt, linAtt, logAtt (-1000 .. 0, 0 .. 1000, -100 .. 0) * devAxi, linAxi, logAxi (0 .. 420, 0 ..1000, 0.. 42) only 3dB steps allowed @@ -1673,6 +1697,7 @@ class Extron extends utils.Adapter { break; case 'linAux': //linear value from database 0 .. 1000 for AuxInput + case 'linDig': //linear value from database 0 .. 1000 for input with digital source value = value > 1000 ? 1000 : value; value = value < 0 ? 0 : value; @@ -1682,7 +1707,9 @@ class Extron extends utils.Adapter { break; case 'logAux': // value from database -18.0 .. 24.0 for input + case 'logDig': // value from database -18.0 .. 24.0 for digital input case 'devAux': // value from device -180 .. 240 for input + case 'devDig': // value from device -180 .. 240 for input with digital source if (type === 'logAux') value = value * 10; value = value > 240 ? 240 : value; value = value < -180 ? -180 : value; @@ -1818,8 +1845,8 @@ class Extron extends utils.Adapter { */ setGain(cmd, oid, value) { try { - const mixPoint = this.oid2id(oid); - const idArray = mixPoint.split('.'); + const id = this.oid2id(oid); + const idArray = id.split('.'); // extron.[n].[fld].[type].[number].[block] // 0 1 2 3 4 5 // extron.[n].in.auxInputs.01.mixPoints.A01.gain @@ -1840,7 +1867,7 @@ class Extron extends utils.Adapter { } let calcMode ='dev'; if (cmd === 'DSM') { - this.setState(`${mixPoint}mute`, Number(value) >0 ? true : false, true); + this.setState(`${id}mute`, Number(value) >0 ? true : false, true); } else { switch (idBlock) { case 'gain' : @@ -1849,6 +1876,7 @@ class Extron extends utils.Adapter { if (device === 'sme211') calcMode = 'devAux'; if (device.startsWith('AXI'))calcMode = 'devAxi'; if (device.startsWith('NetPA'))calcMode = 'devXpa'; + if (cmd === 'DSH') calcMode = 'devDig'; break; case 'postmix' : @@ -1862,8 +1890,8 @@ class Extron extends utils.Adapter { const faderVal = this.calculateFaderValue(value.toString(), calcMode); if (faderVal) { - this.setState(`${mixPoint}level_db`, Number(faderVal.logValue), true); - this.setState(`${mixPoint}level`, Number(faderVal.linValue), true); + this.setState(`${id}level_db`, Number(faderVal.logValue), true); + this.setState(`${id}level`, Number(faderVal.linValue), true); } } } catch (err) { @@ -1906,13 +1934,14 @@ class Extron extends utils.Adapter { /** * Send the gain level to the device - * @param {string} baseId + * @param {string} id * @param {string | any} value * cmd = G[oid]*[value]AU + * cmd = H[oid]*[value]AU on inputs with digital source */ - sendGainLevel(baseId, value) { + sendGainLevel(id, value) { try { - let oid = this.id2oid(baseId); + let oid = this.id2oid(id); const device = this.devices[this.config.device].short; if (oid) { let sendData = `WG${oid}*${value.devValue}AU\r`; @@ -1941,14 +1970,52 @@ class Extron extends utils.Adapter { } } + /** + * Send the gain level to the device + * @param {string} id + * @param {string | any} value + * cmd = H[oid]*[value]AU on inputs with digital source + */ + sendDigGainLevel(id, value) { + try { + let oid = this.id2oid(id); + const device = this.devices[this.config.device].short; + if (oid) { + let sendData = `WH${oid}*${value.devValue}AU\r`; + this.streamSend(sendData); + if ( device === 'sme211') { // on SME211 we have stereo controls + switch (Number(oid)) { + case 40000 : + oid = '40001'; + break; + case 40001 : + oid = '40000'; + break; + case 40002 : + oid = '40003'; + break; + case 40003 : + oid = '40002'; + break; + } + sendData = `WH${oid}*${value.devValue}AU\r`; + this.streamSend(sendData); + } + } + } catch (err) { + this.errorHandler(err, 'sendDigGainLevel'); + } + } + /** * get the gain level from device - * @param {string} baseId + * @param {string} id * cmd = G[oid]AU + * cmd = H[oid]AU on inputs with digital source */ - getGainLevel(baseId) { + getGainLevel(id) { try { - const oid = this.id2oid(baseId); + const oid = this.id2oid(id); if (oid) { this.streamSend(`WG${oid}AU\r`); } @@ -1957,6 +2024,22 @@ class Extron extends utils.Adapter { } } + /** + * get the gain level from device + * @param {string} id + * cmd = H[oid]AU on inputs with digital source + */ + getDigGainLevel(id) { + try { + const oid = this.id2oid(id); + if (oid) { + this.streamSend(`WH${oid}AU\r`); + } + } catch (err) { + this.errorHandler(err, 'getDigGainLevel'); + } + } + /** * Set the source for a auxinput * @param {string} oid @@ -3882,7 +3965,8 @@ class Extron extends utils.Adapter { this.log.info(`onStateChange(): Extron state ${id} changed: ${state.val} (ack = ${state.ack})`); // extron.[n].[idType].[grpId].[number].[block] // 0 1 2 3 4 5 - // extron.[n].in.auxInputs.01.mixPoints.A01 + // extron.[n].in.Inputs.01.preMix + // extron.[n].in.auxInputs.01.mixPoints.A01.gain.level // extron.[n].out.outputs.01.attenuation.level // extron.[n].groups.[n].level // extron.[n].dante.available @@ -3901,6 +3985,7 @@ class Extron extends utils.Adapter { let calcMode ='lin'; let elapsed = 0; let member = ''; + let source = {}; if (typeof(baseId) !== 'undefined' && baseId !== null) { switch (stateName) { case 'mute' : @@ -3930,8 +4015,12 @@ class Extron extends utils.Adapter { switch (idBlock) { // or if value is near 0 case 'gain' : calcMode = 'linGain'; - if (idType === 'auxInputs') calcMode = 'linAux'; - if (device === 'sme211') calcMode = 'linAux'; + if (idType === 'auxInputs') {calcMode = 'linAux';} + else if (device === 'sme211') {calcMode = 'linAux';} + else { + source = await this.getStateAsync(baseId +'.source'); + if (source.val > 0) calcMode = 'linDig'; + } break; case 'premix' : @@ -3951,7 +4040,11 @@ class Extron extends utils.Adapter { this.sendVol(this.calculateFaderValue(`${state.val}`,'linAtt')); } else if (!dante ?idArray[2] : idArray[4] === 'groups') { this.sendGroupLevel(idGrp, Number(state.val)); - } else this.sendGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } else { + if (calcMode === 'linDig') { + this.sendDigGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } else this.sendGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } } else{ this.log.debug(`onStateChange(): processing for ${id} = ${state.val} skipped due to statedelay`); @@ -3962,8 +4055,12 @@ class Extron extends utils.Adapter { switch (idBlock) { case 'gain' : calcMode = 'logGain'; - if (idType === 'auxInputs') calcMode = 'logAux'; - if (idType === 'lineInputs') calcMode = 'logAux'; + if (idType === 'auxInputs') {calcMode = 'logAux';} + else if (idType === 'lineInputs') {calcMode = 'logAux';} + else { + source = await this.getStateAsync(baseId +'.source'); + if (source.val > 0) calcMode = 'logDig'; + } break; case 'premix' : @@ -3981,7 +4078,11 @@ class Extron extends utils.Adapter { this.sendVol(this.calculateFaderValue(`${state.val}`,'logAtt')); } else if (!dante ? idArray[2]: idArray[4] === 'groups') { this.sendGroupLevel(idGrp, Number(state.val)); - } else this.sendGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } else { + if (calcMode === 'logDig') { + this.sendDigGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } else this.sendGainLevel(id,this.calculateFaderValue(`${state.val}`,calcMode)); + } break; case 'status' : From b49c3aeb8ff9f3e6250bbf757760e52af1375c6e Mon Sep 17 00:00:00 2001 From: mschlgl Date: Fri, 26 Jul 2024 17:10:20 +0200 Subject: [PATCH 2/3] daily commit mschlgl 20240726 --- README.md | 1 + main.js | 161 ++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 102 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index d484cd2..fd54af0 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ If you are a non commercial organisation or use it for private use you can get a * (Bannsaenger) updated to adapter-dev and release script * (Bannsaenger) updated dependencies * (Bannsaenger) introducing jsonConfig +* (mschlgl) add more DSP SIS commands ### 0.2.16 (2024-07-09) * (mschlgl) enhanced network reconnect functionality, added DANTE remote commands, additional devices diff --git a/main.js b/main.js index 48c73f4..9595d94 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,6 @@ /** * - * iobroker extron (SIS) Adapter V0.2.16 20240725 + * iobroker extron (SIS) Adapter V0.2.16 20240726 * * Copyright (c) 2020-2024, Bannsaenger * @@ -220,29 +220,8 @@ class Extron extends utils.Adapter { this.isLoggedIn = false; // will be true once telnet login completed this.isVerboseMode = false; // will be true if verbose mode 3 is active this.isDeviceChecked = false; // will be true if device sends banner and will be verified - /* - switch (this.config.type) { - case 'ssh' : - this.log.debug(`clientReConnect(): calling this.client.end()`); - this.client.end(); - break; - case 'telnet' : - this.log.debug(`clientReConnect(): calling this.net.destroy()`); - this.net.destroy(); - break; - } - this.initVars(); - */ this.log.info(`clientReConnect(): reconnecting after ${this.config.reconnectDelay}ms`); this.timers.timeoutReconnectClient = setTimeout(this.clientConnect.bind(this),this.config.reconnectDelay); - /* - this.log.error(`Extron terminating due to comms error`); - if (typeof this.terminate === 'function') { - this.terminate(utils.EXIT_CODES.UNCAUGHT_EXCEPTION); - } else { - process.exit(utils.EXIT_CODES.UNCAUGHT_EXCEPTION); - } - */ } /** @@ -425,8 +404,7 @@ class Extron extends utils.Adapter { } } } else { - throw { 'message': 'Device mismatch error', - 'stack' : 'Please recreate the instance or connect to the correct device' }; + throw { 'message': 'Device mismatch error', 'stack' : 'Please recreate the instance or connect to the correct device' }; } return; } @@ -543,6 +521,8 @@ class Extron extends utils.Adapter { case '20' : this.log.debug(`onStreamData(): Extron got firmware version with build: "${ext2}"`); break; + default: + this.log.warn(`onStreamData(): Extron got unknown version information: "${ext2}"`); } break; @@ -558,6 +538,8 @@ class Extron extends utils.Adapter { this.device.description = `${ext2}`; this.setState('device.description', ext2, true); break; + default: + this.log.warn(`onStreamData(): Extron got unknown information: "${ext2}"`); } break; @@ -567,23 +549,34 @@ class Extron extends utils.Adapter { this.setState('device.name', ext2, true); break; - case 'DSZ': - this.log.info(`onStreamData(): Phantom power status change from OID: "${ext1}" value: ${ext2}`); + // DSP SIS commands + case 'DSA' : // dynamics attack + this.log.info(`onStreamData(): Extron received attack time change from OID : "${ext1}" value "${ext2}"`); + break; + case 'DSB': + if (ext1.startsWith('460')) { // AEC Block + this.log.info(`onStreamData(): Extron received AEC config change from OID : "${ext1}" value "${ext2}"`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; - case 'DSM': // received a mute command - case 'DSG': // received a gain level - this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); - this.setGain(command, ext1, ext2); + case 'DSC': + if (ext1.startsWith('460')) { // AEC Block + this.log.info(`onStreamData(): Extron received AEC config change from OID : "${ext1}" value "${ext2}"`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSD': if (ext1.startsWith('65')) { // delay value this.log.info(`onStreamData(): Extron received delay value change from OID : "${ext1}" value "${ext2}samples"`); - } else { // input source control + } else if (ext1.startsWith('4000')) { // input source control this.log.info(`onStreamData(): Extron got source ${command} from OID: "${ext1}" value: "${ext2}"`); this.setSource(ext1, ext2); - } + } else if (ext1.startsWith('590')) { // input automixer section + this.log.info(`onStreamData(): Extron got automix group change from OID: "${ext1}" value: "${ext2}"`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSE' : // DSP block status change @@ -591,61 +584,109 @@ class Extron extends utils.Adapter { this.setDspBlockStatus(ext1, ext2); break; - case 'DSY' : // DSP block type change 0=no, 1=cmp, 2=lim, 3=gate, 4=agc - this.log.info(`onStreamData(): Extron received DSP block change from OID : "${ext1}" value "${ext2}"`); - this.setDspBlockType(ext1, ext2); - break; - - case 'DST' : - if (ext1.startsWith('65')) { // delay temperature change - this.log.info(`onStreamData(): Extron got a delay ref temparature change from OID : "${ext1}" value: "${ext2}°F"`); - } else { // dynamics threshold change - this.log.info(`onStreamData(): Extron got a threshold change from OID : "${ext1}" value: "${ext2}"`); - this.setDynamicsThreshold(ext1, ext2); - } - break; - - case 'DSA' : // dynamics attack - this.log.info(`onStreamData(): Extron received attack time change from OID : "${ext1}" value "${ext2}"`); + case 'DSF' : // filter frequency change + this.log.info(`onStreamData(): Extron received filter frequency change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSR' : // dynamics ratio - this.log.info(`onStreamData(): Extron received ratio change from OID : "${ext1}" value "${ext2}"`); + case 'DSG': // received a gain level + this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); + this.setGain(command, ext1, ext2); break; case 'DSH' : if (ext1.startsWith('400')) { // digital input gain level - this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); + this.log.info(`onStreamData(): Extron got gain ${command} from OID: "${ext1}" value: ${ext2}`); this.setGain(command, ext1, ext2); - } else { // dynamics hold + } else if (ext1.startsWith('44')) { // dynamics hold this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); - } + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; - - case 'DSL' : // dynamics release - this.log.info(`onStreamData(): Extron received release time change from OID : "${ext1}" value "${ext2}"`); + case 'DSJ' : + if (ext1.startsWith('400')) { // digital input gain level + this.log.info(`onStreamData(): Extron got input config change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('590')) { // input DSP block section + this.log.info(`onStreamData(): Extron got DSP block config change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('600')) { // output section + this.log.info(`onStreamData(): Extron got output config change from OID: "${ext1}" value: ${ext2}`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSK' : // dynamics knee this.log.info(`onStreamData(): Extron received dynamic knee change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSU' : // delay unit change 0=samples, 1=ms, 2=fuß, 3=m - this.log.info(`onStreamData(): Extron received delay unit change from OID : "${ext1}" value "${ext2}"`); + case 'DSL' : // dynamics release + this.log.info(`onStreamData(): Extron received release time change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSF' : // filter frequency change - this.log.info(`onStreamData(): Extron received filter frequency change from OID : "${ext1}" value "${ext2}"`); + case 'DSM': // received a mute command + this.log.info(`onStreamData(): Extron got mute ${command} from OID: "${ext1}" value: ${ext2}`); + this.setGain(command, ext1, ext2); + break; + + case 'DSN': + if (ext1.startsWith('460')) { // digital input gain level + this.log.info(`onStreamData(): Extron got input config change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('590')) { // input DSP block section + this.log.info(`onStreamData(): Extron got DSP block config change from OID: "${ext1}" value: ${ext2}`); + } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; + case 'DSO' : // filter slope 0=6dB/O, 1=12dB/O ... 7=48dB/O this.log.info(`onStreamData(): Extron received filter slope change from OID : "${ext1}" value "${6+(Number(ext2)*6)}dB/O"`); break; + case 'DSP': + if (ext1.startsWith('590')) { // input automixer section + this.log.info(`onStreamData(): Extron got automix last mic change from OID: "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('400')) { // input block + this.log.info(`onStreamData(): Extron got input polarity change change from OID: "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('2')) { // mixpoint block + this.log.info(`onStreamData(): Extron received automixer status change from OID : "${ext1}" value "${ext2}"`); + } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); + break; case 'DSQ' : // filtr q-factor change this.log.info(`onStreamData(): Extron received filter Q-factor change from OID : "${ext1}" value "${Number(ext2)/1000}"`); break; + case 'DSR' : // dynamics ratio + this.log.info(`onStreamData(): Extron received ratio change from OID : "${ext1}" value "${ext2}"`); + break; + + case 'DST' : + if (ext1.startsWith('65')) { // delay reference temperature change + this.log.info(`onStreamData(): Extron got a delay ref temparature change from OID : "${ext1}" value: "${ext2}°F"`); + } else if (ext1.startsWith('44')) { // dynamics threshold change + this.log.info(`onStreamData(): Extron got a threshold change from OID : "${ext1}" value: "${ext2}"`); + this.setDynamicsThreshold(ext1, ext2); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); + break; + + case 'DSU' : // delay unit change 0=samples, 1=ms, 2=fuß, 3=m + this.log.info(`onStreamData(): Extron received delay unit change from OID : "${ext1}" value "${ext2}"`); + break; + case 'DSV' : // unsolicited volume/meter level break; + case 'DSY' : // DSP block type change 0=no, 1=cmp, 2=lim, 3=gate, 4=agc + this.log.info(`onStreamData(): Extron received DSP block change from OID : "${ext1}" value "${ext2}"`); + this.setDspBlockType(ext1, ext2); + break; + + case 'DSZ': + if (ext1.startsWith('400')) { + this.log.info(`onStreamData(): Phantom power status change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('2')) { + this.log.info(`onStreamData(): processing bypass status change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('590')) { + this.log.info(`onStreamData(): automixer status change from OID: "${ext1}" value: ${ext2}`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); + break; + + // player commands case 'PLAY': //received a play mode command this.log.info(`onStreamData(): Extron got play mode ${command} for Player: "${ext1}" value: "${ext2}"`); this.setPlayMode(ext1, ext2); From f5ad410aff81b858e888b854c2ca6f9f19cb6a80 Mon Sep 17 00:00:00 2001 From: mschlgl Date: Mon, 29 Jul 2024 15:43:42 +0200 Subject: [PATCH 3/3] daily commit 20240729 mschlgl --- main.js | 137 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 101 insertions(+), 36 deletions(-) diff --git a/main.js b/main.js index 9595d94..a712068 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,6 @@ /** * - * iobroker extron (SIS) Adapter V0.2.16 20240726 + * iobroker extron (SIS) Adapter V0.2.16 20240729 * * Copyright (c) 2020-2024, Bannsaenger * @@ -503,6 +503,9 @@ class Extron extends utils.Adapter { switch (command) { case 'VER': // received a Version (answer to status query) switch (ext1) { + case '00' : + this.log.debug(`onStreamData(): Extron got detailed firmware version: "${ext2}"`); + break; case '01' : this.log.debug(`onStreamData(): Extron got firmware version: "${ext2}"`); if (!this.versionSet) { @@ -512,9 +515,6 @@ class Extron extends utils.Adapter { this.log.info(`onStreamData(): Extron set device.version: "${ext2}"`); } break; - case '00' : - this.log.debug(`onStreamData(): Extron got detailed firmware version: "${ext2}"`); - break; case '14' : this.log.debug(`onStreamData(): Extron got embedded OS taype and version: "${ext2}"`); break; @@ -568,46 +568,94 @@ class Extron extends utils.Adapter { break; case 'DSD': - if (ext1.startsWith('65')) { // delay value - this.log.info(`onStreamData(): Extron received delay value change from OID : "${ext1}" value "${ext2}samples"`); - } else if (ext1.startsWith('4000')) { // input source control + if (ext1.startsWith('400')) { // input source control this.log.info(`onStreamData(): Extron got source ${command} from OID: "${ext1}" value: "${ext2}"`); this.setSource(ext1, ext2); - } else if (ext1.startsWith('590')) { // input automixer section + } else if (ext1.startsWith('450')) { // input delay value change + this.log.info(`onStreamData(): Extron received delay value change from OID : "${ext1}" value "${ext2}samples"`); + } if (ext1.startsWith('590')) { // input automixer group change this.log.info(`onStreamData(): Extron got automix group change from OID: "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('650')) { // output delay value change + this.log.info(`onStreamData(): Extron received delay value change from OID : "${ext1}" value "${ext2}samples"`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; - case 'DSE' : // DSP block status change - this.log.info(`onStreamData(): Extron got a DSP block status change from OID : "${ext1}" value: "${ext2}"`); - this.setDspBlockStatus(ext1, ext2); + case 'DSE' : // DSP block bypass change + if (ext1.startsWith('41')) { // input filter block + this.log.info(`onStreamData(): Extron got input filter block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('44')) { // input dynamics block + this.log.info(`onStreamData(): Extron got input dynamics block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('450')) { // input delay block + this.log.info(`onStreamData(): Extron got input delay block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('460')) { // input aec block + this.log.info(`onStreamData(): Extron got input aec block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('480')) { // input ducker block + this.log.info(`onStreamData(): Extron got input ducker block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('51')) { // output filter block + this.log.info(`onStreamData(): Extron got output filter block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('52')) { // output feedback suppressor filter block + this.log.info(`onStreamData(): Extron got output feedback suppressor filter block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('530')) { // output feedback suppressor block + this.log.info(`onStreamData(): Extron got output feedback suppressor block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('540')) { // output dynamics filter block + this.log.info(`onStreamData(): Extron got output dynamics block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('550')) { // output delay block + this.log.info(`onStreamData(): Extron got output delay block bypass change from OID : "${ext1}" value: "${ext2}"`); + this.setDspBlockStatus(ext1, ext2); + } else if (ext1.startsWith('56')) { // input ducker source block + this.log.info(`onStreamData(): Extron got input ducker source enabled change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('57')) { // input ducker source block + this.log.info(`onStreamData(): Extron got input ducker source enabled block bypass change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('590')) { // input automix block + this.log.info(`onStreamData(): Extron got input automix block bypass change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('61')) { // output filter block + this.log.info(`onStreamData(): Extron got output filter block bypass change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('640')) { // output dynamics block + this.log.info(`onStreamData(): Extron got output dynamics block bypass change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('650')) { // output delay block + this.log.info(`onStreamData(): Extron got output delay block bypass change from OID : "${ext1}" value: "${ext2}"`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSF' : // filter frequency change this.log.info(`onStreamData(): Extron received filter frequency change from OID : "${ext1}" value "${ext2}"`); break; - case 'DSG': // received a gain level + case 'DSG': // received a gain level change this.log.info(`onStreamData(): Extron got mute/gain ${command} from OID: "${ext1}" value: ${ext2}`); this.setGain(command, ext1, ext2); break; case 'DSH' : - if (ext1.startsWith('400')) { // digital input gain level + if (ext1.startsWith('400')) { // digital input gain level change this.log.info(`onStreamData(): Extron got gain ${command} from OID: "${ext1}" value: ${ext2}`); this.setGain(command, ext1, ext2); - } else if (ext1.startsWith('44')) { // dynamics hold + } else if (ext1.startsWith('440')) { // input dynamics hold time change + this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); + } else if (ext1.startsWith('540')) { // input dynamics hold time change + this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); + } else if (ext1.startsWith('640')) { // output dynamics hold time change this.log.info(`onStreamData(): Extron received hold time change from OID : "${ext1}" value "${ext2}"`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSJ' : - if (ext1.startsWith('400')) { // digital input gain level + if (ext1.startsWith('400')) { // input config change this.log.info(`onStreamData(): Extron got input config change from OID: "${ext1}" value: ${ext2}`); - } else if (ext1.startsWith('590')) { // input DSP block section + } else if (ext1.startsWith('590')) { // input DSP config change this.log.info(`onStreamData(): Extron got DSP block config change from OID: "${ext1}" value: ${ext2}`); - } else if (ext1.startsWith('600')) { // output section + } else if (ext1.startsWith('600')) { // output config change this.log.info(`onStreamData(): Extron got output config change from OID: "${ext1}" value: ${ext2}`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); @@ -627,10 +675,10 @@ class Extron extends utils.Adapter { break; case 'DSN': - if (ext1.startsWith('460')) { // digital input gain level - this.log.info(`onStreamData(): Extron got input config change from OID: "${ext1}" value: ${ext2}`); - } else if (ext1.startsWith('590')) { // input DSP block section - this.log.info(`onStreamData(): Extron got DSP block config change from OID: "${ext1}" value: ${ext2}`); + if (ext1.startsWith('460')) { // digital input AEC config change + this.log.info(`onStreamData(): Extron got input AEC config change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('590')) { // input automix config change + this.log.info(`onStreamData(): Extron got input automix config change from OID: "${ext1}" value: ${ext2}`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; @@ -638,12 +686,14 @@ class Extron extends utils.Adapter { this.log.info(`onStreamData(): Extron received filter slope change from OID : "${ext1}" value "${6+(Number(ext2)*6)}dB/O"`); break; case 'DSP': - if (ext1.startsWith('590')) { // input automixer section - this.log.info(`onStreamData(): Extron got automix last mic change from OID: "${ext1}" value: "${ext2}"`); - } else if (ext1.startsWith('400')) { // input block + if (ext1.startsWith('2')) { // mixpoint automixer status change + this.log.info(`onStreamData(): Extron received mixpoint automixer status change from OID : "${ext1}" value "${ext2}"`); + } else if (ext1.startsWith('400')) { // input polarity change this.log.info(`onStreamData(): Extron got input polarity change change from OID: "${ext1}" value: "${ext2}"`); - } else if (ext1.startsWith('2')) { // mixpoint block - this.log.info(`onStreamData(): Extron received automixer status change from OID : "${ext1}" value "${ext2}"`); + } else if (ext1.startsWith('590')) { // input automixer last mic change + this.log.info(`onStreamData(): Extron got automix last mic change from OID: "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('600')) { // output polarity change + this.log.info(`onStreamData(): Extron got output polarity change change from OID: "${ext1}" value: "${ext2}"`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; case 'DSQ' : // filtr q-factor change @@ -654,11 +704,13 @@ class Extron extends utils.Adapter { break; case 'DST' : - if (ext1.startsWith('65')) { // delay reference temperature change - this.log.info(`onStreamData(): Extron got a delay ref temparature change from OID : "${ext1}" value: "${ext2}°F"`); - } else if (ext1.startsWith('44')) { // dynamics threshold change + if (ext1.startsWith('44')) { // input dynamics threshold change this.log.info(`onStreamData(): Extron got a threshold change from OID : "${ext1}" value: "${ext2}"`); this.setDynamicsThreshold(ext1, ext2); + } else if (ext1.startsWith('450')) { // input delay reference temperature change + this.log.info(`onStreamData(): Extron got a delay ref temperature change from OID : "${ext1}" value: "${ext2}°F"`); + } else if (ext1.startsWith('650')) { // output delay reference temperature change + this.log.info(`onStreamData(): Extron got a delay ref temperature change from OID : "${ext1}" value: "${ext2}°F"`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); break; @@ -670,17 +722,30 @@ class Extron extends utils.Adapter { case 'DSV' : // unsolicited volume/meter level break; - case 'DSY' : // DSP block type change 0=no, 1=cmp, 2=lim, 3=gate, 4=agc - this.log.info(`onStreamData(): Extron received DSP block change from OID : "${ext1}" value "${ext2}"`); + case 'DSW' : // AGC target window + if (ext1.startsWith('44')) { // input dynamics block + this.log.info(`onStreamData(): Extron got input AGC window change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('540')) { // virtual return dynamics block + this.log.info(`onStreamData(): Extron got virtual return AGC window change from OID : "${ext1}" value: "${ext2}"`); + } else if (ext1.startsWith('640')) { // output dynamics block + this.log.info(`onStreamData(): Extron got output AGC window change from OID : "${ext1}" value: "${ext2}"`); + } else + this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); + break; + + case 'DSY' : // DSP block type change + // dyn 0=no, 1=cmp, 2=lim, 3=gate, 4=agc + // filter 0=no, 1= HP Butterworth, 2 = LP Butterworth, 3= Bass/Treble, 4= pra. EQ, 5= notvh EQ, 6=HP Bessel, 7= LP Bessel, 8= HP Linkwitz, 9= LP Linkwitz, 10 = Loudness + this.log.info(`onStreamData(): Extron received DSP block type change from OID : "${ext1}" value "${ext2}"`); this.setDspBlockType(ext1, ext2); break; case 'DSZ': - if (ext1.startsWith('400')) { - this.log.info(`onStreamData(): Phantom power status change from OID: "${ext1}" value: ${ext2}`); - } else if (ext1.startsWith('2')) { + if (ext1.startsWith('2')) { // mixPoint processing bypass change this.log.info(`onStreamData(): processing bypass status change from OID: "${ext1}" value: ${ext2}`); - } else if (ext1.startsWith('590')) { + } else if (ext1.startsWith('400')) { // input phantom power change + this.log.info(`onStreamData(): Phantom power status change from OID: "${ext1}" value: ${ext2}`); + } else if (ext1.startsWith('590')) { // input automixer status change this.log.info(`onStreamData(): automixer status change from OID: "${ext1}" value: ${ext2}`); } else this.log.warn(`onStreamData(): unknown OID: "${ext1}" for command: "${command}"`); @@ -4060,7 +4125,7 @@ class Extron extends utils.Adapter { else if (device === 'sme211') {calcMode = 'linAux';} else { source = await this.getStateAsync(baseId +'.source'); - if (source.val > 0) calcMode = 'linDig'; + if (source.val > 0) calcMode = 'linDig'; // input configured to digital source } break;