diff --git a/src/south/Modbus/Modbus.class.js b/src/south/Modbus/Modbus.class.js index 3db2eafe74..8b9842eddc 100644 --- a/src/south/Modbus/Modbus.class.js +++ b/src/south/Modbus/Modbus.class.js @@ -66,12 +66,12 @@ class Modbus extends SouthConnector { async () => this.modbusFunction(point), ), Promise.resolve()) } catch (error) { - if (error?.err === 'Offline') { + if (error.err === 'Offline') { this.logger.error('Modbus server offline.') await this.disconnect() this.reconnectTimeout = setTimeout(this.connect.bind(this), this.retryInterval) } else { - throw error + throw new Error(error.err) } } } diff --git a/src/south/Modbus/Modbus.class.spec.js b/src/south/Modbus/Modbus.class.spec.js index fe02184832..01022ba982 100644 --- a/src/south/Modbus/Modbus.class.spec.js +++ b/src/south/Modbus/Modbus.class.spec.js @@ -226,7 +226,9 @@ describe('South Modbus', () => { it('should throw error if modbus function throws an error', async () => { await south.connect() south.client.readHoldingRegisters = jest.fn().mockImplementation(() => { - throw new Error('modbus error') + const rejectError = new Error() + rejectError.err = 'modbus error' + throw rejectError }) let modbusError try { diff --git a/src/south/SouthConnector.class.js b/src/south/SouthConnector.class.js index 653f607f3b..937fa0c03c 100644 --- a/src/south/SouthConnector.class.js +++ b/src/south/SouthConnector.class.js @@ -324,6 +324,10 @@ class SouthConnector { async disconnect() { this.connected = false const { name, id } = this.settings + Object.keys(this.currentlyOnScan).forEach((scanMode) => { + this.currentlyOnScan[scanMode] = 0 + this.queryParts[scanMode] = 0 + }) this.statusService.updateStatusDataStream({ 'Connected at': 'Not connected' }) this.logger.info(`South connector "${name}" (${id}) disconnected.`) }