Skip to content

Commit

Permalink
chore: enable on off switch
Browse files Browse the repository at this point in the history
  • Loading branch information
bastikempken committed Feb 16, 2025
1 parent be90b89 commit ed53965
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 1 deletion.
16 changes: 16 additions & 0 deletions rest-files/rest.http
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ GET {{baseUrl}}/homeautoswitch/devicelist/11630%200481724

GET {{baseUrl}}/homeautoswitch/devicelist/

### set switch on

GET {{baseUrl}}/homeautoswitch/setswitchon/11630%200481724/on

### set switch off

GET {{baseUrl}}/homeautoswitch/setswitchon/11630%200481724/off

## device

### create device
Expand All @@ -24,6 +32,14 @@ content-type: application/json

GET {{baseUrl}}/devices

### turn device on

GET {{baseUrl}}/devices/1/on

### turn device off

GET {{baseUrl}}/devices/1/off

### store dataset

POST {{baseUrl}}/devices/1/data-sets
Expand Down
10 changes: 10 additions & 0 deletions src/avm/avm.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ import { DeviceDto, DeviceListDto } from './dtos/avm.dto';
export class AvmController {
constructor(private readonly avmService: AvmService) {}

@Get('setswitchon/:ain/on')
async setSwitchOn(@Param('ain') ain: string): Promise<number> {
return await this.avmService.setSimpleOnOff(ain, 1);
}

@Get('setswitchon/:ain/off')
async setSwitchOff(@Param('ain') ain: string): Promise<number> {
return await this.avmService.setSimpleOnOff(ain, 0);
}

@Get('devicelist/:ain')
async device(@Param('ain') ain: string): Promise<DeviceDto> {
const device = await this.avmService.getDevice(ain);
Expand Down
26 changes: 25 additions & 1 deletion src/avm/avm.service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Injectable, Logger } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom, map } from 'rxjs';
import { catchError, firstValueFrom, map, of } from 'rxjs';
import { ConfigService } from '@nestjs/config';
import { DataSetEntity } from '../devices/data-set.entity';
import { LoginService } from './login.service';
Expand All @@ -9,6 +9,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { DeviceDto, DeviceListDto } from './dtos/avm.dto';
import { Response } from './dtos/avm-internal.dto';
import { AxiosError } from 'axios';

@Injectable()
export class AvmService {
Expand All @@ -26,6 +27,29 @@ export class AvmService {
this.fb = configService.getOrThrow<string>('FB');
}

async setSimpleOnOff(ain: string, onoff: 1 | 0): Promise<number> {
const sid = await this.loginService.getSid();
const request = this.httpService
.get<string>(`${this.fb}/${this.endpoint}`, {
params: {
sid,
ain,
switchcmd: 'setsimpleonoff',
onoff,
},
})
.pipe(
map((res) => {
return parseInt(res.data);
}),
catchError((err: AxiosError) => {
this.logger.error('error on simple on off', err.request);
return of(-1);
}),
);
return firstValueFrom(request);
}

async getDeviceList(): Promise<DeviceListDto> {
const sid = await this.loginService.getSid();
return await this.callDeviceList(sid);
Expand Down
10 changes: 10 additions & 0 deletions src/devices/device.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ export class DeviceController {
return this.deviceService.getDevices(active);
}

@Get(':id/on')
switchDeviceOn(@Param('id') id: string): Promise<number> {
return this.deviceService.switchDeviceOn(id);
}

@Get(':id/off')
switchDeviceOff(@Param('id') id: string): Promise<number> {
return this.deviceService.switchDeviceOff(id);
}

@Post(':id/data-sets')
soreDataset(@Param('id') id: string): Promise<DataSetEntity> {
return this.deviceService.storeDataset(id);
Expand Down
16 changes: 16 additions & 0 deletions src/devices/device.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,20 @@ export class DeviceService {
getDatasets(deviceId: string) {
return this.dataSetRepository.findBy({ deviceId });
}

async switchDeviceOn(deviceId: string) {
const device = await this.deviceRepository.findOneBy({ id: deviceId });
if (device === null) {
throw new BadRequestException('Device not found');
}
return this.avmService.setSimpleOnOff(device.ain, 1);
}

async switchDeviceOff(deviceId: string) {
const device = await this.deviceRepository.findOneBy({ id: deviceId });
if (device === null) {
throw new BadRequestException('Device not found');
}
return this.avmService.setSimpleOnOff(device.ain, 0);
}
}

0 comments on commit ed53965

Please sign in to comment.