mirror of
https://github.com/SyncrowIOT/backend.git
synced 2025-07-16 18:56:22 +00:00
Add method to update TapToRun scene in Tuya and integrate it in SceneService
This commit is contained in:
@ -120,6 +120,36 @@ export class TuyaService {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async updateTapToRunScene(
|
||||||
|
sceneTuyaUuid: string,
|
||||||
|
spaceId: string,
|
||||||
|
sceneName: string,
|
||||||
|
actions: ConvertedAction[],
|
||||||
|
decisionExpr: string,
|
||||||
|
) {
|
||||||
|
const path = `/v2.0/cloud/scene/rule/${sceneTuyaUuid}`;
|
||||||
|
const response = await this.tuya.request({
|
||||||
|
method: 'PUT',
|
||||||
|
path,
|
||||||
|
body: {
|
||||||
|
space_id: spaceId,
|
||||||
|
name: sceneName,
|
||||||
|
type: 'scene',
|
||||||
|
decision_expr: decisionExpr,
|
||||||
|
conditions: [],
|
||||||
|
actions: actions,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.success) {
|
||||||
|
return response;
|
||||||
|
} else {
|
||||||
|
throw new HttpException(
|
||||||
|
`Error fetching scene rule: ${response.msg}`,
|
||||||
|
HttpStatus.BAD_REQUEST,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async triggerScene(sceneId: string): Promise<TuyaResponseInterface> {
|
async triggerScene(sceneId: string): Promise<TuyaResponseInterface> {
|
||||||
const path = `/v2.0/cloud/scene/rule/${sceneId}/actions/trigger`;
|
const path = `/v2.0/cloud/scene/rule/${sceneId}/actions/trigger`;
|
||||||
|
@ -128,6 +128,47 @@ export class SceneService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
async updateSceneExternalService(
|
||||||
|
spaceTuyaUuid: string,
|
||||||
|
sceneTuyaUuid: string,
|
||||||
|
updateSceneTapToRunDto: UpdateSceneTapToRunDto,
|
||||||
|
) {
|
||||||
|
const { sceneName, decisionExpr, actions } = updateSceneTapToRunDto;
|
||||||
|
try {
|
||||||
|
const formattedActions = await this.prepareActions(actions);
|
||||||
|
|
||||||
|
const response = (await this.tuyaService.updateTapToRunScene(
|
||||||
|
sceneTuyaUuid,
|
||||||
|
spaceTuyaUuid,
|
||||||
|
sceneName,
|
||||||
|
formattedActions,
|
||||||
|
decisionExpr,
|
||||||
|
)) as AddTapToRunSceneInterface;
|
||||||
|
|
||||||
|
if (!response.success) {
|
||||||
|
throw new HttpException(
|
||||||
|
'Failed to update scene in Tuya',
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
} catch (err) {
|
||||||
|
if (err instanceof HttpException) {
|
||||||
|
throw err;
|
||||||
|
} else if (err.message?.includes('tuya')) {
|
||||||
|
throw new HttpException(
|
||||||
|
'API error: Failed to update scene',
|
||||||
|
HttpStatus.BAD_GATEWAY,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new HttpException(
|
||||||
|
`An Internal error has been occured ${err}`,
|
||||||
|
HttpStatus.INTERNAL_SERVER_ERROR,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async createSceneExternalService(
|
async createSceneExternalService(
|
||||||
spaceTuyaUuid: string,
|
spaceTuyaUuid: string,
|
||||||
@ -285,25 +326,22 @@ export class SceneService {
|
|||||||
showInHomePage: updateSceneTapToRunDto.showInHomePage,
|
showInHomePage: updateSceneTapToRunDto.showInHomePage,
|
||||||
};
|
};
|
||||||
|
|
||||||
const createdTuyaSceneResponse = await this.createSceneExternalService(
|
const updateTuyaSceneResponse = await this.updateSceneExternalService(
|
||||||
space.spaceTuyaUuid,
|
space.spaceTuyaUuid,
|
||||||
|
scene.sceneTuyaUuid,
|
||||||
addSceneTapToRunDto,
|
addSceneTapToRunDto,
|
||||||
);
|
);
|
||||||
const newSceneTuyaUuid = createdTuyaSceneResponse.result?.id;
|
|
||||||
|
|
||||||
if (!newSceneTuyaUuid) {
|
if (!updateTuyaSceneResponse.success) {
|
||||||
throw new HttpException(
|
throw new HttpException(
|
||||||
`Failed to create a external new scene`,
|
`Failed to update a external scene`,
|
||||||
HttpStatus.BAD_GATEWAY,
|
HttpStatus.BAD_GATEWAY,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.delete(scene.sceneTuyaUuid, space.spaceTuyaUuid);
|
|
||||||
|
|
||||||
const updatedScene = await this.sceneRepository.update(
|
const updatedScene = await this.sceneRepository.update(
|
||||||
{ uuid: sceneUuid },
|
{ uuid: sceneUuid },
|
||||||
{
|
{
|
||||||
sceneTuyaUuid: newSceneTuyaUuid,
|
|
||||||
showInHomePage: addSceneTapToRunDto.showInHomePage,
|
showInHomePage: addSceneTapToRunDto.showInHomePage,
|
||||||
sceneIcon: {
|
sceneIcon: {
|
||||||
uuid: addSceneTapToRunDto.iconUuid,
|
uuid: addSceneTapToRunDto.iconUuid,
|
||||||
|
Reference in New Issue
Block a user