Skip to content

Commit

Permalink
feat: avm module
Browse files Browse the repository at this point in the history
  • Loading branch information
bastikempken committed Feb 10, 2025
1 parent 9a8a519 commit 40a2554
Show file tree
Hide file tree
Showing 14 changed files with 96 additions and 112 deletions.
7 changes: 3 additions & 4 deletions src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import { Module } from '@nestjs/common';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
import { MeasurementModule } from './measurement/measurement.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { MeasurementEntity } from './measurement/measurement.entity';
import { MeasurementEntity } from './avm/measurement.entity';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { HTTPLoggingInterceptor } from './logging-interceptor';
import { DeviceModule } from './devices/device.modules';
import { AvmModule } from './avm/avm.modules';
import { DeviceEntity } from './devices/device.entity';

@Module({
imports: [
MeasurementModule,
DeviceModule,
AvmModule,
ServeStaticModule.forRoot({
Expand All @@ -28,7 +27,7 @@ import { AvmModule } from './avm/avm.modules';
port: 5432,
password: configService.getOrThrow('DB_PW'),
username: configService.getOrThrow('DB_USER'),
entities: [MeasurementEntity],
entities: [MeasurementEntity, DeviceEntity],
database: configService.getOrThrow('DB_NAME'),
synchronize: true,
logging: false,
Expand Down
8 changes: 4 additions & 4 deletions src/avm/avm.controller.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Controller, Get, Param } from '@nestjs/common';
import { AvmService } from './avm.service';
import { LoginService } from './login.service';
import { MeasurementEntity } from './measurement.entity';

@Controller('avm/:ain')
export class AvmController {
Expand All @@ -9,9 +10,8 @@ export class AvmController {
private readonly loginService: LoginService,
) {}

@Get('energy')
async getEnergy(@Param('ain') ain: string): Promise<string> {
const sid = await this.loginService.getSid();
return this.avmService.getEnergy(ain, sid);
@Get('measurement')
async getEnergy(@Param('ain') ain: string): Promise<MeasurementEntity> {
return this.avmService.getMeasurement(ain);
}
}
4 changes: 3 additions & 1 deletion src/avm/avm.modules.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ import { AvmController } from './avm.controller';
import { AvmService } from './avm.service';
import { HttpModule } from '@nestjs/axios';
import { LoginService } from './login.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { MeasurementEntity } from './measurement.entity';

@Module({
imports: [HttpModule],
imports: [HttpModule, TypeOrmModule.forFeature([MeasurementEntity])],
controllers: [AvmController],
providers: [AvmService, LoginService],
exports: [],
Expand Down
66 changes: 64 additions & 2 deletions src/avm/avm.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { Injectable, Logger } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom, map, Observable } from 'rxjs';
import { firstValueFrom, map } from 'rxjs';
import { ConfigService } from '@nestjs/config';
import { MeasurementEntity } from './measurement.entity';
import { LoginService } from './login.service';
import { XMLParser } from 'fast-xml-parser';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';

@Injectable()
export class AvmService {
Expand All @@ -11,12 +16,30 @@ export class AvmService {

constructor(
private readonly httpService: HttpService,
private readonly loginService: LoginService,
readonly configService: ConfigService,
@InjectRepository(MeasurementEntity)
private measurementRepository: Repository<MeasurementEntity>,
) {
this.fb = configService.getOrThrow<string>('FB');
}

public async getEnergy(ain: string, sid: string): Promise<string> {
public async getMeasurement(ain: string): Promise<MeasurementEntity> {
const sid = await this.loginService.getSid();
const energy = await this.getEnergy(ain, sid);
const power = await this.getPower(ain, sid);
const temperature = await this.getTemperature(ain, sid);
const voltage = await this.getVoltage(ain, sid);
const parser = new XMLParser();
const entity = new MeasurementEntity();
entity.energy = energy;
entity.power = power;
entity.temperature = temperature;

return entity;
}

private async getEnergy(ain: string, sid: string): Promise<number> {
const request = this.httpService
.get<string>(`${this.fb}/${this.endpoint}`, {
params: {
Expand All @@ -25,6 +48,45 @@ export class AvmService {
switchcmd: 'getswitchenergy',
},
})
.pipe(map((res) => parseInt(res.data)));
return firstValueFrom(request);
}

private async getTemperature(ain: string, sid: string): Promise<number> {
const request = this.httpService
.get<string>(`${this.fb}/${this.endpoint}`, {
params: {
sid,
ain,
switchcmd: 'gettemperature',
},
})
.pipe(map((res) => parseInt(res.data)));
return firstValueFrom(request);
}

private async getPower(ain: string, sid: string): Promise<number> {
const request = this.httpService
.get<string>(`${this.fb}/${this.endpoint}`, {
params: {
sid,
ain,
switchcmd: 'getswitchpower',
},
})
.pipe(map((res) => parseInt(res.data)));
return firstValueFrom(request);
}

private async getVoltage(ain: string, sid: string): Promise<string> {
const request = this.httpService
.get<string>(`${this.fb}/${this.endpoint}`, {
params: {
sid,
ain,
switchcmd: 'getdevicelistinfos',
},
})
.pipe(map((res) => res.data));
return firstValueFrom(request);
}
Expand Down
File renamed without changes.
9 changes: 9 additions & 0 deletions src/devices/create-device.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Type } from 'class-transformer';
import { IsNotEmpty, IsString } from 'class-validator';

export class CreateDeviceDto {
@Type(() => String)
@IsString()
@IsNotEmpty()
readonly ain: string;
}
4 changes: 2 additions & 2 deletions src/devices/device.controller.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { Controller, Get } from '@nestjs/common';
import { DeviceDto } from './device.dto';
import { DeviceService } from './device.service';
import { DeviceEntity } from './device.entity';

@Controller('devices')
export class DeviceController {
constructor(private readonly deviceService: DeviceService) {}

@Get()
devices(): Promise<DeviceDto[]> {
devices(): Promise<DeviceEntity[]> {
return this.deviceService.getDevices();
}
}
4 changes: 4 additions & 0 deletions src/devices/device.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { Entity } from 'typeorm';

@Entity({ name: 'devices' })
export class DeviceEntity {}
6 changes: 3 additions & 3 deletions src/devices/device.modules.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { MeasurementEntity } from '../measurement/measurement.entity';
import { DeviceController } from './device.controller';
import { DeviceService } from './device.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DeviceEntity } from './device.entity';

@Module({
imports: [TypeOrmModule.forFeature([MeasurementEntity])],
imports: [TypeOrmModule.forFeature([DeviceEntity])],
controllers: [DeviceController],
providers: [DeviceService],
exports: [],
Expand Down
15 changes: 4 additions & 11 deletions src/devices/device.service.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,16 @@
import { Injectable } from '@nestjs/common';
import { DeviceDto } from './device.dto';
import { InjectRepository } from '@nestjs/typeorm';
import { MeasurementEntity } from '../measurement/measurement.entity';
import { Repository } from 'typeorm';
import { DeviceEntity } from './device.entity';

@Injectable()
export class DeviceService {
constructor(
@InjectRepository(MeasurementEntity)
private measurementRepository: Repository<MeasurementEntity>,
@InjectRepository(DeviceEntity)
private deviceRepository: Repository<DeviceEntity>,
) {}

async getDevices(): Promise<DeviceDto[]> {
const x = await this.measurementRepository
.createQueryBuilder('measurement')
.select('DISTINCT(device) ain')
.getRawMany();
console.log(x);

async getDevices(): Promise<DeviceEntity[]> {
return Promise.resolve([]);
}
}
34 changes: 0 additions & 34 deletions src/measurement/create-measurement.dto.ts

This file was deleted.

14 changes: 0 additions & 14 deletions src/measurement/measurement.controller.ts

This file was deleted.

13 changes: 0 additions & 13 deletions src/measurement/measurement.module.ts

This file was deleted.

24 changes: 0 additions & 24 deletions src/measurement/measurement.service.ts

This file was deleted.

0 comments on commit 40a2554

Please sign in to comment.