added timeseries

This commit is contained in:
unknown
2024-10-20 16:46:44 +03:00
parent 1f6072c292
commit 07ac955eb0
9 changed files with 62 additions and 2 deletions

View File

@ -19,6 +19,7 @@ import { DeviceNotificationEntity } from '../modules/device/entities';
import { RegionEntity } from '../modules/region/entities';
import { TimeZoneEntity } from '../modules/timezone/entities';
import { VisitorPasswordEntity } from '../modules/visitor-password/entities';
import { DeviceStatusLogEntity } from '../modules/device-status-log/entities';
@Module({
imports: [
@ -52,6 +53,7 @@ import { VisitorPasswordEntity } from '../modules/visitor-password/entities';
RegionEntity,
TimeZoneEntity,
VisitorPasswordEntity,
DeviceStatusLogEntity,
],
namingStrategy: new SnakeNamingStrategy(),
synchronize: Boolean(JSON.parse(configService.get('DB_SYNC'))),

View File

@ -2,10 +2,15 @@ import { Module } from '@nestjs/common';
import { DeviceStatusFirebaseController } from './controllers/devices-status.controller';
import { DeviceStatusFirebaseService } from './services/devices-status.service';
import { DeviceRepository } from '@app/common/modules/device/repositories';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories/device-status.repository';
@Module({
providers: [DeviceStatusFirebaseService, DeviceRepository],
providers: [
DeviceStatusFirebaseService,
DeviceRepository,
DeviceStatusLogRepository,
],
controllers: [DeviceStatusFirebaseController],
exports: [DeviceStatusFirebaseService],
exports: [DeviceStatusFirebaseService, DeviceStatusLogRepository],
})
export class DeviceStatusFirebaseModule {}

View File

@ -11,6 +11,7 @@ import { TuyaContext } from '@tuya/tuya-connector-nodejs';
import { ConfigService } from '@nestjs/config';
import { firebaseDataBase } from '../../firebase.config';
import { Database, DataSnapshot, get, ref, set } from 'firebase/database';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
@Injectable()
export class DeviceStatusFirebaseService {
private tuya: TuyaContext;
@ -18,6 +19,7 @@ export class DeviceStatusFirebaseService {
constructor(
private readonly configService: ConfigService,
private readonly deviceRepository: DeviceRepository,
private deviceStatusLogRepository: DeviceStatusLogRepository,
) {
const accessKey = this.configService.get<string>('auth-config.ACCESS_KEY');
const secretKey = this.configService.get<string>('auth-config.SECRET_KEY');
@ -175,6 +177,7 @@ export class DeviceStatusFirebaseService {
);
// Update or add status codes
for (const statusItem of addDeviceStatusDto.status) {
statusMap.set(statusItem.code, statusItem.value);
}
@ -184,7 +187,15 @@ export class DeviceStatusFirebaseService {
code,
value,
}));
const newLog = this.deviceStatusLogRepository.create({
deviceUuid: addDeviceStatusDto.deviceUuid,
deviceTuyaUuid: addDeviceStatusDto.deviceTuyaUuid,
productUuid: addDeviceStatusDto.productUuid,
productType: addDeviceStatusDto.productType,
status: existingData.status,
});
await this.deviceStatusLogRepository.save(newLog);
// Save the updated data to Firebase
await set(dataRef, existingData);

View File

@ -0,0 +1,26 @@
import { Entity, Column, PrimaryColumn, Index } from 'typeorm';
@Entity('device-status-log')
@Index('logTime_idx', ['logTime'])
export class DeviceStatusLogEntity {
@PrimaryColumn()
id: number;
@PrimaryColumn({ type: 'timestamptz' })
logTime: Date;
@Column({ type: 'text' })
deviceUuid: string;
@Column({ type: 'text' })
deviceTuyaUuid: string;
@Column({ type: 'text' })
productUuid: string;
@Column({ type: 'text' })
productType: string;
@Column({ type: 'jsonb' })
status: any; // JSON array of status codes and values
}

View File

@ -0,0 +1 @@
export * from './device-status-log.entity';

View File

@ -0,0 +1,10 @@
import { DataSource, Repository } from 'typeorm';
import { Injectable } from '@nestjs/common';
import { DeviceStatusLogEntity } from '../entities/device-status-log.entity';
@Injectable()
export class DeviceStatusLogRepository extends Repository<DeviceStatusLogEntity> {
constructor(private dataSource: DataSource) {
super(DeviceStatusLogEntity, dataSource.createEntityManager());
}
}

View File

@ -0,0 +1 @@
export * from './device-status.repository';

View File

@ -10,6 +10,7 @@ import { DeviceService } from 'src/device/services';
import { ProductRepository } from '@app/common/modules/product/repositories';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
import { SpaceRepository } from '@app/common/modules/space/repositories';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
@Module({
imports: [ConfigModule, DeviceRepositoryModule],
controllers: [DoorLockController],
@ -22,6 +23,7 @@ import { SpaceRepository } from '@app/common/modules/space/repositories';
ProductRepository,
DeviceStatusFirebaseService,
SpaceRepository,
DeviceStatusLogRepository,
],
exports: [DoorLockService],
})

View File

@ -12,6 +12,7 @@ import { ProductRepository } from '@app/common/modules/product/repositories';
import { DeviceStatusFirebaseService } from '@app/common/firebase/devices-status/services/devices-status.service';
import { SpaceRepository } from '@app/common/modules/space/repositories';
import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/repositories';
import { DeviceStatusLogRepository } from '@app/common/modules/device-status-log/repositories';
@Module({
imports: [ConfigModule, DeviceRepositoryModule, DoorLockModule],
controllers: [VisitorPasswordController],
@ -25,6 +26,7 @@ import { VisitorPasswordRepository } from '@app/common/modules/visitor-password/
SpaceRepository,
DeviceRepository,
VisitorPasswordRepository,
DeviceStatusLogRepository,
],
exports: [VisitorPasswordService],
})