add SosHandlerService and integrate SOS handling in TuyaWebSocketService

This commit is contained in:
faris Aljohari
2025-04-17 16:58:34 +03:00
parent c34011660f
commit d341c47286
3 changed files with 55 additions and 5 deletions

View File

@ -12,6 +12,7 @@ import { DeviceNotificationRepository } from '../modules/device/repositories';
import { DeviceStatusFirebaseModule } from '../firebase/devices-status/devices-status.module';
import { CommunityPermissionService } from './services/community.permission.service';
import { CommunityRepository } from '../modules/community/repositories';
import { SosHandlerService } from './services/sos.handler.service';
@Global()
@Module({
@ -25,6 +26,7 @@ import { CommunityRepository } from '../modules/community/repositories';
DeviceMessagesService,
DeviceNotificationRepository,
CommunityRepository,
SosHandlerService,
],
exports: [
HelperHashService,

View File

@ -0,0 +1,42 @@
import { Injectable, Logger } from '@nestjs/common';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
@Injectable()
export class SosHandlerService {
private readonly logger = new Logger(SosHandlerService.name);
constructor(
private readonly deviceStatusFirebaseService: DeviceStatusFirebaseService,
) {}
isSosTriggered(status: any): boolean {
return (
Array.isArray(status) &&
status.some((item) => item.code === 'sos' && item.value === 'sos')
);
}
async handleSosEvent(devId: string, logData: any): Promise<void> {
try {
await this.deviceStatusFirebaseService.addDeviceStatusToFirebase({
deviceTuyaUuid: devId,
status: [{ code: 'sos', value: true }],
log: logData,
});
setTimeout(async () => {
try {
await this.deviceStatusFirebaseService.addDeviceStatusToFirebase({
deviceTuyaUuid: devId,
status: [{ code: 'sos', value: false }],
log: logData,
});
} catch (err) {
this.logger.error('Failed to send SOS false value', err);
}
}, 2000);
} catch (err) {
this.logger.error('Failed to send SOS true value', err);
}
}
}

View File

@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
import TuyaWebsocket from '../../config/tuya-web-socket-config';
import { ConfigService } from '@nestjs/config';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
import { SosHandlerService } from './sos.handler.service';
@Injectable()
export class TuyaWebSocketService {
@ -11,6 +12,7 @@ export class TuyaWebSocketService {
constructor(
private readonly configService: ConfigService,
private readonly deviceStatusFirebaseService: DeviceStatusFirebaseService,
private readonly sosHandlerService: SosHandlerService,
) {
this.isDevEnv =
this.configService.get<string>('NODE_ENV') === 'development';
@ -42,11 +44,15 @@ export class TuyaWebSocketService {
try {
const { devId, status, logData } = this.extractMessageData(message);
if (this.sosHandlerService.isSosTriggered(status)) {
await this.sosHandlerService.handleSosEvent(devId, logData);
} else {
await this.deviceStatusFirebaseService.addDeviceStatusToFirebase({
deviceTuyaUuid: devId,
status: status,
log: logData,
});
}
this.client.ackMessage(message.messageId);
} catch (error) {