Appearance
em-simulator
Simulates up to 15 extension modules (EM1).
Description
This script can emulate the communication of up to 15 extension modules on the first configured connection.
All extension module simulations start out disabled and must be manually enabled first by calling service.setEnabled(moduleNr, true);
. The moduleNr
argument ranges from 1
to 15
.
After enabling a module its sensor values can be set by calling service.setSensorValue(moduleNr, sensorNr, value);
. The sensorNr
argument ranges from 1
to 6
. The value
argument is the resistance value in Ohm to communicate back to the controller. The controller will convert that resistance value into the respective temperature value or switch state on its side.
Every couple of seconds the main controller sends updated relay output values to the configured extension modules. They can be read out using service.getRelayInfo(moduleNr, relayNr)
. The relayNr
argument ranges from 1
to 5
.
Service
typescript
setEnabled(moduleNr: number, isEnabled: boolean): void;
setSensorValue(moduleNr: number, sensorNr: number, value: number): void;
getRelayInfo(moduleNr: number, relayNr: number): RelayInfo | null;
Example
Config:
typescript
export default defineConfig({
connections: [{
kind: 'serialPort',
path: '/dev/tty.usbmodem',
}],
scripts: [
import('../scripts/em-simulator'),
defineScript(async ($) => {
const emSimulatorScript = await import('../scripts/em-simulator');
const emSimulatorService = await emSimulatorScript.default.requireService();
emSimulatorService.setEnabled(1, true);
emSimulatorService.setSensorValue(1, 1, 1000); // M1-S1 -> 1000 Ohm -> 0 °C Pt1000
emSimulatorService.setSensorValue(1, 2, 1000); // M1-S2 -> 1100 Ohm -> 26 °C Pt1000
emSimulatorService.setSensorValue(1, 3, 1000); // M1-S3 -> 1200 Ohm -> 52 °C Pt1000
emSimulatorService.setSensorValue(1, 4, 1000); // M1-S4 -> 1300 Ohm -> 78 °C Pt1000
emSimulatorService.setSensorValue(1, 5, 1000); // M1-S5 -> 1400 Ohm -> 104 °C Pt1000
emSimulatorService.setSensorValue(1, 6, 1000); // M1-S6 -> 1500 Ohm -> 131 °C Pt1000
await $.connect();
const ti = new $.core.TimestampInterval({
interval: 1000,
onInterval(timestamp) {
const relayInfo = emSimulatorService.getRelayInfo(1, 1);
if (relayInfo) {
console.log(`${timestamp.toISOString()}: M1-R1: ${relayInfo.value}`);
}
},
});
ti.start();
}),
],
});
Running it in the toolbox:
❯ bin/resol-vbus-core-toolbox.ts --config configs/above-config-saved-to-file.ts
2025-04-13T19:53:23.001Z: M1-R1: 0
2025-04-13T19:53:24.003Z: M1-R1: 100
2025-04-13T19:53:25.001Z: M1-R1: 100
2025-04-13T19:53:26.001Z: M1-R1: 100
2025-04-13T19:53:27.000Z: M1-R1: 0
2025-04-13T19:53:28.001Z: M1-R1: 100
2025-04-13T19:53:29.001Z: M1-R1: 100
2025-04-13T19:53:30.001Z: M1-R1: 100
2025-04-13T19:53:31.002Z: M1-R1: 0
...