From ae5cac9f7cb649d34e1e04ed2bbf205a6451a327 Mon Sep 17 00:00:00 2001 From: Flavio De Stefano Date: Thu, 3 Oct 2024 10:03:31 +0200 Subject: [PATCH 1/2] Add video options --- config.schema.json | 35 +++++++++++++++++++++++++++++++++++ src/cameraAccessory.ts | 17 +++++++++++++---- src/types/tapo.ts | 18 ++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/config.schema.json b/config.schema.json index 505f7da..14b3902 100644 --- a/config.schema.json +++ b/config.schema.json @@ -131,6 +131,41 @@ "type": "string", "description": "Name of the LED toggle", "placeholder": "LED" + }, + "videoMaxWidth": { + "title": "Video Max Width", + "type": "integer", + "description": "Maximum width of the video stream", + "placeholder": 1280 + }, + "videoMaxHeight": { + "title": "Video Max Height", + "type": "integer", + "description": "Maximum height of the video stream", + "placeholder": 720 + }, + "videoMaxFPS": { + "title": "Video Max FPS", + "type": "integer", + "description": "Maximum frames per second of the video stream", + "placeholder": 30 + }, + "videoMaxBitrate": { + "title": "Video Max Bitrate", + "type": "integer", + "description": "Maximum bitrate of the video stream", + "placeholder": 300 + }, + "videoPacketSize": { + "title": "Video Packet Size", + "type": "integer", + "description": "Size of the video packets", + "placeholder": 1316 + }, + "videoForceMax": { + "title": "Force Max Video", + "type": "boolean", + "description": "Force the video stream to use the maximum values" } } } diff --git a/src/cameraAccessory.ts b/src/cameraAccessory.ts index 8dfde96..3e90f07 100644 --- a/src/cameraAccessory.ts +++ b/src/cameraAccessory.ts @@ -32,6 +32,13 @@ export type CameraConfig = { disableMotionSensorAccessory?: boolean; lowQuality?: boolean; + videoMaxWidth?: number; + videoMaxHeight?: number; + videoMaxFPS?: number; + videoForceMax?: boolean; + videoMaxBirate?: number; + videoPacketSize?: number; + videoConfig?: VideoConfig; eyesToggleAccessoryName?: string; @@ -168,10 +175,12 @@ export class CameraAccessory { audio: true, videoFilter: "none", vcodec: "copy", - maxWidth: this.config.lowQuality ? 640 : 1920, - maxHeight: this.config.lowQuality ? 480 : 1080, - maxFPS: 15, - forceMax: true, + maxWidth: this.config.videoMaxWidth, + maxHeight: this.config.videoMaxHeight, + maxFPS: this.config.videoMaxFPS, + maxBitrate: this.config.videoMaxBirate, + packetSize: this.config.videoPacketSize, + forceMax: this.config.videoForceMax, ...(this.config.videoConfig || {}), }; return config; diff --git a/src/types/tapo.ts b/src/types/tapo.ts index 1e5ea31..dc45507 100644 --- a/src/types/tapo.ts +++ b/src/types/tapo.ts @@ -46,6 +46,14 @@ export type TAPOCameraGetRequest = name: "config"; }; }; + } + | { + method: "getWhitelampStatus"; + params: { + image: { + get_wtl_status: "null"; + }; + }; }; export type TAPOCameraSetRequest = @@ -102,6 +110,16 @@ export type TAPOCameraSetRequest = }; }; }; + } + | { + method: "setWhitelampConfig"; + params: { + image: { + switch: { + wtl_intensity_level: string; + }; + }; + }; }; export type TAPOCameraUnencryptedRequest = { From eac419f50abb67b48b61295d3b8a8e450fa93554 Mon Sep 17 00:00:00 2001 From: Flavio De Stefano Date: Thu, 3 Oct 2024 10:25:10 +0200 Subject: [PATCH 2/2] Add description --- README.md | 2 ++ config.schema.json | 9 +++++---- src/cameraAccessory.ts | 3 +++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 023df79..cacafd3 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ Make your TP-Link TAPO security camera compatible with Homekit through Homebridg The plugin exposes the camera RTSP video feed, and toggle accessories to configure your automations. +If your video feed is not working, try to check if any of the parameters at the video config can be tuned. You can use [https://sunoo.github.io/homebridge-camera-ffmpeg/configs](https://sunoo.github.io/homebridge-camera-ffmpeg/configs) to check if someone has already found the right values for your camera. + ### Toggle accessories - _"Eyes"_ controls the privacy mode; when it's on it means that the camera is able to see diff --git a/config.schema.json b/config.schema.json index 14b3902..dfd5ce6 100644 --- a/config.schema.json +++ b/config.schema.json @@ -2,8 +2,8 @@ "pluginAlias": "tapo-camera", "pluginType": "platform", "singular": true, - "headerDisplay": "Homebridge plugin for TP-Link TAPO security cameras", - "footerDisplay": null, + "headerDisplay": "Homebridge plugin for TP-Link TAPO security cameras.", + "footerDisplay": "If your video feed is not working, try to check if any of the parameters at the video config can be tuned. You can use https://sunoo.github.io/homebridge-camera-ffmpeg/configs to check if someone has already found the right values for your camera.", "form": null, "display": null, "schema": { @@ -100,7 +100,7 @@ "lowQuality": { "title": "Low Quality", "type": "boolean", - "description": "Video stream will be requested in low-quality (640x480) instead of HQ (1920x1080)" + "description": "Video stream will be requested in low-quality instead of high-quality" }, "eyesToggleAccessoryName": { "title": "Eyes (privacy mode) toggle Name", @@ -132,6 +132,7 @@ "description": "Name of the LED toggle", "placeholder": "LED" }, + "videoMaxWidth": { "title": "Video Max Width", "type": "integer", @@ -165,7 +166,7 @@ "videoForceMax": { "title": "Force Max Video", "type": "boolean", - "description": "Force the video stream to use the maximum values" + "description": "Force the video stream to use the maximum values, instead of the one provided by the Homekit request. Most likely you don't want this" } } } diff --git a/src/cameraAccessory.ts b/src/cameraAccessory.ts index 3e90f07..918262f 100644 --- a/src/cameraAccessory.ts +++ b/src/cameraAccessory.ts @@ -183,6 +183,7 @@ export class CameraAccessory { forceMax: this.config.videoForceMax, ...(this.config.videoConfig || {}), }; + return config; } @@ -204,6 +205,8 @@ export class CameraAccessory { ); this.accessory.configureController(delegate.controller); + + this.log.debug("Camera streaming setup done"); } catch (err) { this.log.error("Error setting up camera streaming:", err); }