From 01154e9497066e32841c0d708252e74b22ccd214 Mon Sep 17 00:00:00 2001 From: anishsane Date: Wed, 1 Jan 2025 18:51:48 +0530 Subject: [PATCH] Add Webcam stats as sensors. (Can be used in home assistant.) (#22744) --- .../tasmota_xdrv_driver/xdrv_81_esp32_webcam.ino | 14 ++++++++++++++ .../xdrv_81_esp32_webcam_task.ino | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam.ino b/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam.ino index c547e8b4a..1bce850f4 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam.ino @@ -1503,6 +1503,18 @@ void WcUpdateStats(void) { WcStats.camcnt = 0; } +void WcSensorStats(void) { + if (!Wc.up) { return; } + + ResponseAppend_P(PSTR(",\"CAMERA\":{" + "\"" D_WEBCAM_STATS_FPS "\":%d," + "\"" D_WEBCAM_STATS_CAMFAIL "\":%d," + "\"" D_WEBCAM_STATS_JPEGFAIL "\":%d," + "\"" D_WEBCAM_STATS_CLIENTFAIL "\":%d}"), + WcStats.camfps, WcStats.camfail, + WcStats.jpegfail, WcStats.clientfail); +} + const char HTTP_WEBCAM_FPS[] PROGMEM = "{s}%s " D_FRAME_RATE "{m}%d " D_UNIT_FPS "{e}"; void WcStatsShow(void) { @@ -1532,6 +1544,8 @@ bool Xdrv81(uint32_t function) { break; case FUNC_EVERY_SECOND: WcUpdateStats(); + case FUNC_JSON_APPEND: + WcSensorStats(); case FUNC_WEB_SENSOR: WcStatsShow(); break; diff --git a/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam_task.ino b/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam_task.ino index 0b682e6eb..b1bf49a06 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam_task.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_81_esp32_webcam_task.ino @@ -2950,6 +2950,18 @@ void WcUpdateStats(void) { Wc.loopcounter = 0; } +void WcSensorStats(void) { + if (!Wc.up) { return; } + + ResponseAppend_P(PSTR(",\"CAMERA\":{" + "\"" D_WEBCAM_STATS_FPS "\":%d," + "\"" D_WEBCAM_STATS_CAMFAIL "\":%d," + "\"" D_WEBCAM_STATS_JPEGFAIL "\":%d," + "\"" D_WEBCAM_STATS_CLIENTFAIL "\":%d}"), + WcStats.camfps, WcStats.camfail, + WcStats.jpegfail, WcStats.clientfail); +} + #ifndef D_WEBCAM_STATE #define D_WEBCAM_STATE "State" #define D_WEBCAM_POWEREDOFF "PowerOff" @@ -2994,6 +3006,9 @@ bool Xdrv99(uint32_t function) { case FUNC_EVERY_SECOND: WcUpdateStats(); break; + case FUNC_JSON_APPEND: + WcSensorStats(); + break; case FUNC_WEB_SENSOR: WcStatsShow(); break;