Lots of changes

-    Feedback van dataSensor array
-    dataSliders min/max and unit
-    Camera before Unity
-    Restart knop buiten service mode
-    Operator phonenumber button
-    Gracefull shutdown
-    Out of service control
This commit is contained in:
2025-10-23 17:45:35 +02:00
parent f07ba57168
commit cd33670361
36 changed files with 1444 additions and 277 deletions

View File

@@ -17,7 +17,9 @@ export class UnityWebSocket {
zedPath: '',
zedReady: false,
zedFPS: '-',
parameters: [],
outOfService: null,
sliders: [],
sensors: [],
};
socket: WebSocket;
@@ -32,30 +34,72 @@ export class UnityWebSocket {
const sliderIndex: number = args[0];
const percentage: number = args[1];
if (this.parameters.parameters[sliderIndex] == undefined)
return;
this.parameters.parameters[sliderIndex].outputValue =
percentage;
this.setSliderValue(sliderIndex, percentage);
break;
if (
this.socket == null ||
this.socket.readyState !== WebSocket.OPEN
)
return;
case 'enableOutOfService':
const enableCallback: Function = args[0];
if (typeof enableCallback !== 'function') return;
this.socket.send(
JSON.stringify({
type: 'set_slider_value',
sliderIndex: sliderIndex,
sliderValue: percentage,
})
);
this.setOutOfService(true);
this.broadcastState();
enableCallback({ succeed: true });
break;
case 'disableOutOfService':
const disableCallback: Function = args[0];
if (typeof disableCallback !== 'function') return;
this.setOutOfService(false);
disableCallback({ succeed: true });
break;
}
}
quitApplication() {
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
return;
this.socket.send(
JSON.stringify({
type: 'quit_application',
})
);
}
setSliderValue(sliderIndex: number, sliderValue: number) {
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
return;
this.socket.send(
JSON.stringify({
type: 'set_slider_value',
sliderIndex,
sliderValue,
})
);
if (this.parameters.sliders[sliderIndex] == undefined) return;
this.parameters.sliders[sliderIndex].outputValue = sliderValue;
this.broadcastState();
}
setOutOfService(state: boolean) {
if (this.socket == null || this.socket.readyState !== WebSocket.OPEN)
return;
this.socket.send(
JSON.stringify({
type: 'set_out_of_service',
showOutOfService: state,
})
);
this.parameters.outOfService = true;
this.broadcastState();
}
broadcastState() {
this._Main.WebServer.socket.emit(
'unityWebSocketState',
@@ -99,7 +143,28 @@ export class UnityWebSocket {
this.parameters.zedReady =
message.heartbeat.zedCamera.isZedReady;
this.parameters.zedFPS = message.heartbeat.zedCamera.cameraFPS;
this.parameters.parameters = message.heartbeat.dataSliders;
this.parameters.outOfService =
message.heartbeat.showOutOfService ?? false;
this.parameters.sensors = message.heartbeat.dataSensors;
this.parameters.sliders = message.heartbeat.dataSliders.map(
(slider) => {
return {
...slider,
min: slider.min ?? 0,
max: slider.max ?? 1,
unit: slider.unit ?? '%',
visualMultiplier:
(slider.min ?? 0) == 0 && (slider.max ?? 1) == 1
? 100
: null,
decimalPlaces:
(slider.min ?? 0) == 0 && (slider.max ?? 1) == 1
? 0
: 2,
} as UnityParameterSlider;
}
);
this.broadcastState();
break;
@@ -182,6 +247,7 @@ export class UnityWebSocket {
});
this.socket.on('close', () => {
if (this._Main.UnityRunner.restartTriggered) return;
if (this.restartRequested) return;
this.setInfo(
'Disconnected',
@@ -247,7 +313,16 @@ interface UnityParameters {
zedPath: string;
zedReady: boolean;
zedFPS: string;
parameters: UnitySocketMessageHeartbeat['heartbeat']['dataSliders'];
outOfService: boolean;
sliders: UnityParameterSlider[];
sensors: UnitySocketMessageHeartbeat['heartbeat']['dataSensors'];
}
type UnityHeartbeatSlider =
UnitySocketMessageHeartbeat['heartbeat']['dataSliders'][number];
interface UnityParameterSlider extends UnityHeartbeatSlider {
visualMultiplier?: number;
decimalPlaces?: number;
}
type UnitySocketMessage =
@@ -261,10 +336,18 @@ interface UnitySocketMessageBase {
interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
type: 'heartbeat_data';
heartbeat: {
dataSensors: {
sensorIndex: number;
deviceName: string;
outputValue: number;
}[];
dataSliders: {
sliderIndex: number;
sliderName: string;
outputValue: number;
min: number;
max: number;
unit: string;
}[];
dataTimeline: {
isStanding: boolean;
@@ -278,6 +361,7 @@ interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase {
streamInputPort: number;
zedGrabError: number;
};
showOutOfService?: boolean;
};
}
interface UnitySocketMessageCameraFrame extends UnitySocketMessageBase {