
{"id":9695,"date":"2022-06-21T13:53:02","date_gmt":"2022-06-21T13:53:02","guid":{"rendered":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/"},"modified":"2026-03-30T08:51:59","modified_gmt":"2026-03-30T08:51:59","slug":"harvester","status":"publish","type":"page","link":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/","title":{"rendered":"Harvester"},"content":{"rendered":"\n<p>Harvester is an RDK-B telemetry component responsible for collecting and reporting WiFi metrics and statistics from the gateway device to cloud management systems. The component gathers data about associated WiFi devices, neighboring access points, and radio interface statistics at configurable intervals and transmits these metrics using Avro serialization format through the WebPA\/Parodus framework for upstream analytics and monitoring.<\/p>\n\n\n\n<p>The component operates as a scheduled data collection agent that periodically polls WiFi HAL APIs to retrieve device association information, radio traffic metrics, and neighboring AP scan results. Harvester packages this telemetry data into structured Avro-encoded messages and transmits them to cloud-based data processing systems through the CcspWebPA messaging infrastructure. The component supports configurable polling and reporting intervals for each telemetry report type with persistent storage of configuration parameters through CcspPsm integration.<\/p>\n\n\n\n<p>Harvester implements TR-181 data model parameters under the Device.X_RDKCENTRAL-COM_Report namespace enabling dynamic configuration and control of telemetry collection behavior. The architecture supports both traditional WiFi HAL-based data collection and R-BUS-based data retrieval when OneWifi feature is enabled providing flexibility across different RDK-B platform configurations.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph LR\n    subgraph ExtSys[\"External Systems\"]\n        Cloud[\"Cloud Analytics Management Platform\"]\n    end\n    \n    subgraph RDKBMid[\"RDK-B Middleware\"]\n        Harvester[\"Harvester Telemetry Collection\"]\n        WebPA[\"WebPA\/Parodus Cloud Messaging\"]\n        PSM[\"PSM Config Storage\"]\n    end\n    \n    subgraph SysLayer[\"System Layer\"]\n        WiFiHAL[\"WiFi HAL\"]\n        RBusLayer[\"RBus OneWifi\"]\n    end\n    \n    Cloud -->|Configuration Commands| WebPA\n    WebPA -->|Telemetry Reports Avro\/Binary| Cloud\n    WebPA &lt;-->|Get\/Set Parameters| Harvester\n    Harvester -->|Store\/Retrieve Config| PSM\n    Harvester -->|Poll WiFi Metrics| WiFiHAL\n    Harvester -->|RBus Queries OneWifi| RBusLayer\n    RBusLayer -->|WiFi Data| WiFiHAL\n    \n    classDef external fill:#fff3e0,stroke:#ef6c00,stroke-width:2px\n    classDef component fill:#e1f5fe,stroke:#0277bd,stroke-width:2px\n    classDef system fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px\n    \n    class Cloud external\n    class Harvester,WebPA,PSM component\n    class WiFiHAL,RBusLayer system<\/pre><\/div>\n\n\n\n<p>&nbsp;<strong>Key Features &amp; Responsibilities<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Interface Devices WiFi Reporting<\/strong>: Collects and reports detailed information about WiFi devices associated with each SSID including MAC addresses, signal strength, connection timestamps, operating mode, frequency band, and data rate information at configurable polling intervals<\/li>\n\n\n\n<li><strong>Radio Interface Statistics Collection<\/strong>: Gathers radio-level performance metrics including channel utilization, noise floor, transmission statistics, retry counts, and error rates for each WiFi radio interface supporting 2.4GHz and 5GHz bands<\/li>\n\n\n\n<li><strong>Neighboring Access Point Scanning<\/strong>: Performs periodic WiFi channel scans to detect and report neighboring access points including SSID, BSSID, channel, signal strength, security mode, and operating standards for spectrum analysis and channel optimization<\/li>\n\n\n\n<li><strong>Avro Serialization and Encoding<\/strong>: Packages collected telemetry data using Apache Avro binary serialization format with schema validation ensuring compact data representation and efficient transmission to cloud analytics platforms<\/li>\n\n\n\n<li><strong>WebPA Integration and Upstream Messaging<\/strong>: Establishes persistent connection with Parodus daemon through a dedicated handler thread that continuously monitors connectivity status and performs connection initialization using libparodus APIs over nanomsg IPC transport. When reporting intervals expire, collection threads invoke message transmission by constructing WRP event message structures containing Avro-encoded telemetry payloads with message type, source MAC address, destination routing, and content-type metadata. The transmission function calls libparodus_send with mutex synchronization to deliver messages to Parodus daemon which forwards them to cloud management systems. When transmission to Parodus fails, the component implements synchronous retry logic with exponential backoff delay calculated as 2^n &#8211; 1 seconds, attempting up to 5 retries before abandoning the message. The Parodus daemon handles subsequent message queuing and cloud delivery while Harvester confirms only that Parodus successfully accepted the outbound telemetry report<\/li>\n<\/ul>\n\n\n\n<p><strong><br>Design<\/strong><\/p>\n\n\n\n<p>Harvester follows an event-driven, multi-threaded architecture organized around independent data collection threads for each telemetry report type. The design separates data collection responsibilities into distinct modules corresponding to Interface Devices WiFi (IDW), Radio Interface Statistics (RIS), and Neighboring AP (NAP) reporting each operating with independent polling cycles and reporting intervals configured through TR-181 parameters.<\/p>\n\n\n\n<p>The component implements a producer-consumer pattern where dedicated polling threads periodically invoke WiFi HAL APIs or R-BUS queries to retrieve metrics and package the collected data into Avro-encoded binary payloads. These telemetry messages are transmitted to Parodus daemon through libparodus IPC interface with Harvester implementing retry logic and exponential backoff to ensure Parodus accepts the messages. Parodus is subsequently responsible for reliable cloud delivery including message queuing and cloud-level connection management.<\/p>\n\n\n\n<p>Configuration parameters for polling periods, reporting intervals, and harvesting enable flags are persisted in CcspPsm ensuring configuration survives system reboots and component restarts. The TR-181 data model implementation provides standardized northbound interfaces for external components and management systems to configure harvester behavior dynamically. The component supports a default configuration mechanism with override TTL support allowing temporary parameter changes that automatically revert to defaults after expiration.<\/p>\n\n\n\n<p>When OneWifi feature is enabled, Harvester utilizes R-BUS APIs for data collection providing an abstraction layer over direct WiFi HAL access and enabling better integration with unified WiFi management architectures. The dual-mode operation supports both traditional HAL-based collection and R-BUS-based queries determined at build time through conditional compilation.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">graph TD\n    subgraph Harvester [\"Harvester Component\"]\n        subgraph DataModel [\"Data Model &amp; Configuration\"]\n            TR181DM[TR-181 Parameter Handlers]\n            ConfigMgr[Configuration Manager]\n        end\n        \n        subgraph CollectionModules [\"Telemetry Collection Modules\"]\n            IDWModule[IDW]\n            RISModule[RIS]\n            NAPModule[NAP]\n        end\n\n        subgraph ReportingModule [\"Reporting &amp; Transmission\"]\n            AvroEncode[Avro Encoder]\n            WebPAIntf[WebPA Interface]\n            RBusAPI[RBus API Layer]\n        end\n    end\n\n    subgraph ExternalSystems [\"External Systems\"]\n        CloudSvc[Cloud Analytics Platform]\n        PSM[(PSM)]\n        WiFiHAL[WiFi HAL]\n    end\n\n    TR181DM --> ConfigMgr\n    ConfigMgr &lt;--> PSM\n    \n    TR181DM --> IDWModule\n    TR181DM --> RISModule\n    TR181DM --> NAPModule\n    \n    IDWModule --> AvroEncode\n    RISModule --> AvroEncode\n    NAPModule --> AvroEncode\n    \n    AvroEncode --> WebPAIntf\n    WebPAIntf --> CloudSvc\n    \n    IDWModule --> WiFiHAL\n    RISModule --> WiFiHAL\n    NAPModule --> WiFiHAL\n    \n    IDWModule -.->|OneWifi| RBusAPI\n    RISModule -.->|OneWifi| RBusAPI\n    NAPModule -.->|OneWifi| RBusAPI<\/pre><\/div>\n\n\n\n<p>&nbsp;<strong>Prerequisites and Dependencies<\/strong><\/p>\n\n\n\n<p><strong>Build-Time Flags and Configuration:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configure Option<\/strong><\/td><td><strong>DISTRO Feature<\/strong><\/td><td><strong>Build Flag<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Default<\/strong><\/td><\/tr><tr><td><code>--enable-rdkOneWifi<\/code><\/td><td><code>OneWifi<\/code><\/td><td><code>RDK_ONEWIFI<\/code><\/td><td>Enable R-BUS-based WiFi data collection through OneWifi unified management stack<\/td><td>Disabled<\/td><\/tr><tr><td><code>--enable-core_net_lib_feature_support<\/code><\/td><td><code>core-net-lib<\/code><\/td><td><code>CORE_NET_LIB<\/code><\/td><td>Enable advanced networking library support for network operations<\/td><td>Disabled<\/td><\/tr><tr><td>N\/A<\/td><td><code>safec<\/code><\/td><td><code>SAFEC_DUMMY_API<\/code>&nbsp;(when disabled)<\/td><td>Enable bounds-checking string and memory functions for security hardening<\/td><td>Enabled<\/td><\/tr><tr><td>N\/A<\/td><td><code>seshat<\/code><\/td><td><code>ENABLE_SESHAT<\/code><\/td><td>Enable Seshat integration for secure token management in CcspWebPA communication<\/td><td>Disabled<\/td><\/tr><tr><td>N\/A (CFLAGS)<\/td><td>N\/A<\/td><td><code>FEATURE_SUPPORT_RDKLOG<\/code><\/td><td>Enable RDK logging framework integration for standardized logging across components<\/td><td>Enabled<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>RDK-B Platform and Integration Requirements:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Build Dependencies<\/strong>:&nbsp;<code>ccsp-common-library<\/code>,&nbsp;<code>rdk-logger<\/code>,&nbsp;<code>avro-c<\/code>,&nbsp;<code>trower-base64<\/code>,&nbsp;<code>hal-wifi<\/code>,&nbsp;<code>msgpackc<\/code>,&nbsp;<code>dbus<\/code>,&nbsp;<code>utopia<\/code>,&nbsp;<code>wrp-c<\/code>,&nbsp;<code>nanomsg<\/code>,&nbsp;<code>libparodus<\/code><\/li>\n\n\n\n<li><strong>RDK-B Components<\/strong>:&nbsp;<code>CcspPsm<\/code>,&nbsp;<code>CcspWiFiAgent\/OneWifi<\/code>,&nbsp;<code>CcspWebPA<\/code><\/li>\n\n\n\n<li><strong>HAL Dependencies<\/strong>: WiFi HAL APIs for device association queries, radio statistics, and neighboring AP scans<\/li>\n\n\n\n<li><strong>Systemd Services<\/strong>: CcspPsm services must be active before harvester initialization for configuration parameter retrieval<\/li>\n\n\n\n<li><strong>Message Bus<\/strong>: Component registers with component name&nbsp;<code>com.cisco.spvtg.ccsp.harvester<\/code>&nbsp;or with name&nbsp;<code>harvester<\/code>&nbsp;when OneWifi is enabled<\/li>\n\n\n\n<li><strong>TR-181 Data Model<\/strong>: Implements&nbsp;<code>Device.X_RDKCENTRAL-COM_Report<\/code>&nbsp;object hierarchy for telemetry configuration and control<\/li>\n\n\n\n<li><strong>Configuration Files<\/strong>:&nbsp;<code>Harvester.XML<\/code>&nbsp;for TR-181 parameter definitions; Avro schema files in&nbsp;<code>\/usr\/ccsp\/harvester\/<\/code>&nbsp;including&nbsp;<code>InterfaceDevicesWifi.avsc<\/code>,&nbsp;<code>RadioInterfacesStatistics.avsc<\/code>,&nbsp;<code>GatewayAccessPointNeighborScanReport.avsc<\/code><\/li>\n\n\n\n<li><strong>Startup Order<\/strong>: Initialize after CcspPsm, CcspWiFiAgent\/OneWifi, and CcspWebPA services are running to ensure configuration retrieval and message transmission capabilities<\/li>\n<\/ul>\n\n\n\n<p><strong>Threading Model:<\/strong><\/p>\n\n\n\n<p>Harvester implements a multi-threaded architecture with independent worker threads for each telemetry report type enabling concurrent data collection without blocking operations.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Threading Architecture<\/strong>: Multi-threaded with main event loop and dedicated worker threads for each telemetry report<\/li>\n\n\n\n<li><strong>Main Thread<\/strong>: Handles TR-181 parameter requests, component lifecycle management, and message bus event processing<\/li>\n\n\n\n<li><strong>Worker Threads<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>IDW Thread<\/strong>: Polls associated device information at configured intervals and triggers Avro encoding and transmission (thread function:&nbsp;<code>StartAssociatedDeviceHarvesting<\/code>)<\/li>\n\n\n\n<li><strong>RIS Thread<\/strong>: Collects radio-level performance metrics periodically and packages data for upstream reporting<\/li>\n\n\n\n<li><strong>NAP Thread<\/strong>: Performs WiFi channel scans to detect neighboring access points and generates telemetry reports<\/li>\n\n\n\n<li><strong>Parodus Handler Thread<\/strong>: Maintains WebPA\/Parodus connection and handles upstream message transmission with retry logic (<code>handle_parodus<\/code>&nbsp;thread function)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Synchronization<\/strong>: Uses pthread mutexes for configuration parameter access, pthread condition variables for polling interval timing, and semaphores for thread lifecycle management<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-ComponentStateFlow\">Component State Flow<\/h3>\n\n\n\n<p><strong>Initialization to Active State<\/strong><\/p>\n\n\n\n<p>Harvester follows a structured initialization sequence establishing message bus connectivity, loading persisted configuration from CcspPsm, and spawning worker threads for telemetry collection based on enabled report types.<\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    autonumber\n    participant System\n    participant ConfigLoader\n    participant TR181\n    participant DependencyManager\n    participant CollectionMgr\n    participant ReportingEngine\n\n    System->>System: Start [*] \u2192 Initializing\n    Note right of System: Initialize logging system&lt;br>Load component library&lt;br>Setup signal handlers\n\n    System->>ConfigLoader: Component Start \u2192 LoadingConfig\n    Note right of ConfigLoader: Load Harvester.XML&lt;br>Parse TR-181 definitions&lt;br>Load Avro schemas&lt;br>Initialize default values\n\n    ConfigLoader->>TR181: Configuration Loaded \u2192 RegisteringTR181\n    Note right of TR181: Register Report objects&lt;br>Create parameter handlers&lt;br>Setup get\/set functions&lt;br>Initialize DML callbacks\n\n    TR181->>DependencyManager: Data Models Registered \u2192 ConnectingDeps\n    Note right of DependencyManager: Connect to PSM&lt;br>Load persisted config&lt;br>Initialize WebPA\/Parodus&lt;br>Connect to WiFi HAL\n\n    DependencyManager->>System: All Systems Ready \u2192 Active\n    Note right of System: Process TR-181 requests&lt;br>Manage collection threads&lt;br>Handle telemetry reporting&lt;br>Monitor system health\n\n    System->>CollectionMgr: Enable Report \u2192 StartCollection\n    CollectionMgr->>CollectionMgr: Spawn Worker Thread\n    CollectionMgr->>ReportingEngine: Collect and Report Data\n    ReportingEngine->>ReportingEngine: Encode and Transmit\n    ReportingEngine->>CollectionMgr: Transmission Complete\n    CollectionMgr->>System: Collection Active \u2192 Active\n\n    System->>System: Component Stop \u2192 Shutdown \u2192 [*]<\/pre><\/div>\n\n\n\n<p><strong>Runtime State Changes and Context Switching<\/strong><\/p>\n\n\n\n<p>During operation, Harvester responds to configuration changes, network events, and CcspWebPA connectivity status affecting telemetry collection behavior.<\/p>\n\n\n\n<p><strong>State Change Triggers:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TR-181 parameter changes for Enabled flags triggering thread creation or termination for specific report types<\/li>\n\n\n\n<li>Polling period or reporting period modifications requiring reconfiguration of worker thread timers without thread restart<\/li>\n\n\n\n<li>Override TTL expiration causing automatic reversion to default configuration parameters retrieved from CcspPsm<\/li>\n\n\n\n<li>CcspWebPA connection loss triggering buffering of telemetry messages and retry attempts with exponential backoff<\/li>\n<\/ul>\n\n\n\n<p><strong>Context Switching Scenarios:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OneWifi mode transitions between WiFi HAL direct access and R-BUS-based query mechanisms based on build-time configuration<\/li>\n\n\n\n<li>Collection mode switches between active polling and suspended state when Enabled parameter changes from true to false<\/li>\n\n\n\n<li>Transmission context switches between immediate send and retry queue when CcspWebPA\/Parodus connection availability changes<\/li>\n<\/ul>\n\n\n\n<p><strong>Call Flow<\/strong><\/p>\n\n\n\n<p><strong>Initialization Call Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Init as Initialization Process\n    participant SSP as SSP Module\n    participant DM as Data Model\n    participant Comp as Harvester Core\n    \n    Init->>SSP: ssp_main()\n    SSP->>SSP: dlopen(libHarvesterSsp.so)\n    SSP->>DM: COSA_Init()\n    DM->>Comp: Initialize Harvester Context\n    Comp->>PSM: Retrieve Configuration\n    PSM-->>Comp: Config Parameters\n    Comp->>Comp: Create Worker Threads\n    Comp-->>DM: Init Complete\n    DM-->>SSP: Ready\n    SSP->>Init: Initialization Complete (Active State)<\/pre><\/div>\n\n\n\n<p><strong>Request Processing Call Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as WebPA\/TR-181 Client\n    participant DM as Data Model Handler\n    participant IDW as IDW Module\n    participant Avro as Avro Encoder\n    participant WebPA as WebPA Interface\n    participant Cloud as Cloud Server\n    \n    Client->>DM: Set Enabled=true\n    DM->>PSM: Store Parameter\n    DM->>IDW: StartAssociatedDeviceHarvesting()\n    IDW->>IDW: Create Collection Thread\n    loop Polling Interval\n        IDW->>WiFiHAL: wifi_getAssociatedDeviceDetail()\n        WiFiHAL-->>IDW: Device Data Array\n        IDW->>Avro: Package Avro Message\n        Avro-->>IDW: Encoded Binary Payload\n        IDW->>WebPA: sendWebpaMsg()\n        WebPA->>Cloud: WRP Message (Avro\/Binary)\n        Cloud-->>WebPA: ACK\n    end\n    DM-->>Client: Success<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-TR\u2011181DataModels\">TR\u2011181 Data Models<\/h3>\n\n\n\n<p><strong>Supported TR-181 Parameters<\/strong><\/p>\n\n\n\n<p>Harvester implements vendor-specific TR-181 data model extensions under the Device.X_RDKCENTRAL-COM_Report namespace providing configuration and control of WiFi telemetry collection and reporting functionality. The implementation follows TR-181 Issue 2 architectural patterns with support for dynamic parameter updates, validation, commit\/rollback operations, and persistent storage integration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-ObjectHierarchy\">Object Hierarchy<\/h3>\n\n\n\n<pre class=\"wp-block-preformatted\">Device.\n\u2514\u2500\u2500 X_RDKCENTRAL-COM_Report.\n    \u251c\u2500\u2500 InterfaceDevicesWifi.\n    \u2502   \u251c\u2500\u2500 Enabled (boolean, R\/W)\n    \u2502   \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n    \u2502   \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n    \u2502   \u251c\u2500\u2500 Schema (string, R)\n    \u2502   \u251c\u2500\u2500 SchemaID (string, R)\n    \u2502   \u2514\u2500\u2500 Default.\n    \u2502       \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n    \u2502       \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n    \u2502       \u2514\u2500\u2500 OverrideTTL (unsignedInt, R)\n    \u251c\u2500\u2500 RadioInterfaceStatistics.\n    \u2502   \u251c\u2500\u2500 Enabled (boolean, R\/W)\n    \u2502   \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n    \u2502   \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n    \u2502   \u251c\u2500\u2500 Schema (string, R)\n    \u2502   \u251c\u2500\u2500 SchemaID (string, R)\n    \u2502   \u2514\u2500\u2500 Default.\n    \u2502       \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n    \u2502       \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n    \u2502       \u2514\u2500\u2500 OverrideTTL (unsignedInt, R)\n    \u2514\u2500\u2500 NeighboringAP.\n        \u251c\u2500\u2500 Enabled (boolean, R\/W)\n        \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n        \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n        \u251c\u2500\u2500 Schema (string, R)\n        \u251c\u2500\u2500 SchemaID (string, R)\n        \u2514\u2500\u2500 Default.\n            \u251c\u2500\u2500 ReportingPeriod (unsignedInt, R\/W)\n            \u251c\u2500\u2500 PollingPeriod (unsignedInt, R\/W)\n            \u2514\u2500\u2500 OverrideTTL (unsignedInt, R)<\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Parameter Path<\/strong><\/td><td><strong>Data Type<\/strong><\/td><td><strong>Access<\/strong><\/td><td><strong>Default Value<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>BBF Compliance<\/strong><\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.InterfaceDevicesWifi.Enabled<\/code><\/td><td>boolean<\/td><td>R\/W<\/td><td><code>false<\/code><\/td><td>Enable or disable associated WiFi device telemetry collection and reporting<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.InterfaceDevicesWifi.PollingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for polling WiFi HAL to retrieve associated device information<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.InterfaceDevicesWifi.ReportingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for transmitting collected telemetry data to cloud systems<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.InterfaceDevicesWifi.Schema<\/code><\/td><td>string<\/td><td>R<\/td><td><code>InterfaceDevicesWifi<\/code><\/td><td>Avro schema name identifying the data structure for telemetry reports<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.InterfaceDevicesWifi.SchemaID<\/code><\/td><td>string<\/td><td>R<\/td><td><code>(computed)<\/code><\/td><td>Base64-encoded hash of Avro schema used for message validation<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.RadioInterfaceStatistics.Enabled<\/code><\/td><td>boolean<\/td><td>R\/W<\/td><td><code>false<\/code><\/td><td>Enable or disable radio interface statistics telemetry collection and reporting<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.RadioInterfaceStatistics.PollingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for polling radio-level performance metrics<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.RadioInterfaceStatistics.ReportingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for transmitting radio statistics to cloud systems<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.NeighboringAP.Enabled<\/code><\/td><td>boolean<\/td><td>R\/W<\/td><td><code>false<\/code><\/td><td>Enable or disable neighboring access point scan telemetry collection<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.NeighboringAP.PollingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for performing neighboring AP channel scans<\/td><td>Vendor Extension<\/td><\/tr><tr><td><code>Device.X_RDKCENTRAL-COM_Report.NeighboringAP.ReportingPeriod<\/code><\/td><td>unsignedInt<\/td><td>R\/W<\/td><td><code>1<\/code><\/td><td>Interval in seconds for transmitting neighboring AP scan results<\/td><td>Vendor Extension<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"Harvester-InternalModules\">Internal Modules<\/h4>\n\n\n\n<p>Harvester is organized into specialized modules responsible for telemetry data collection, encoding, transmission, and configuration management with clear separation between report-specific collection logic and shared infrastructure components.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Module\/Class<\/strong><\/td><td><strong>Description<\/strong><\/td><td><strong>Key Files<\/strong><\/td><\/tr><tr><td><strong>IDW Module<\/strong><\/td><td>Collects detailed information about WiFi clients associated with each SSID by polling WiFi HAL or R-BUS APIs including device MAC addresses, signal strength, PHY rates, operating modes, and connection timestamps. Thread function&nbsp;<code>StartAssociatedDeviceHarvesting<\/code>&nbsp;implements the collection loop with configurable polling intervals.<\/td><td><code>harvester_associated_devices.c<\/code>,&nbsp;<code>harvester_associated_devices.h<\/code>,&nbsp;<code>harvester_associated_devices_avropack.c<\/code><\/td><\/tr><tr><td><strong>RIS Module<\/strong><\/td><td>Gathers radio-level performance metrics including channel utilization, noise floor, transmission counts, retry statistics, and error rates for capacity analysis and network health monitoring<\/td><td><code>harvester_radio_traffic.c<\/code>,&nbsp;<code>harvester_radio_traffic.h<\/code>,&nbsp;<code>harvester_radio_traffic_avropack.c<\/code><\/td><\/tr><tr><td><strong>NAP Module<\/strong><\/td><td>Performs periodic WiFi channel scans to detect surrounding access points and collects SSID, BSSID, channel number, signal strength, security settings, and operating standards for spectrum analysis<\/td><td><code>harvester_neighboring_ap.c<\/code>,&nbsp;<code>harvester_neighboring_ap.h<\/code>,&nbsp;<code>harvester_neighboring_ap_avropack.c<\/code><\/td><\/tr><tr><td><strong>Harvester Data Model<\/strong><\/td><td>Implements TR-181 Device.X_RDKCENTRAL-COM_Report object hierarchy with parameter handlers for get\/set operations, validation logic, commit\/rollback support, and integration with PSM for persistent storage<\/td><td><code>cosa_harvester_dml.c<\/code>,&nbsp;<code>cosa_harvester_dml.h<\/code>,&nbsp;<code>cosa_harvester_internal.c<\/code><\/td><\/tr><tr><td><strong>WebPA Integration<\/strong><\/td><td>Manages upstream message transmission to cloud systems through Parodus messaging infrastructure with WRP protocol support, retry logic with exponential backoff, and connection health monitoring<\/td><td><code>webpa_interface.c<\/code>,&nbsp;<code>webpa_interface.h<\/code>,&nbsp;<code>webpa_interface_with_seshat.c<\/code>,&nbsp;<code>webpa_interface_without_seshat.c<\/code><\/td><\/tr><tr><td><strong>R-BUS API Module<\/strong><\/td><td>Provides abstraction layer for WiFi data retrieval through R-BUS messaging when OneWifi is enabled replacing direct WiFi HAL calls with R-BUS queries for unified WiFi management integration<\/td><td><code>harvester_R-BUS_api.c<\/code>,&nbsp;<code>harvester_R-BUS_api.h<\/code><\/td><\/tr><tr><td><strong>Service Support Platform<\/strong><\/td><td>Handles component lifecycle management, message bus initialization, configuration loading, logging framework setup, and signal handling for graceful shutdown and crash reporting<\/td><td><code>ssp_main.c<\/code>,&nbsp;<code>ssp_action.c<\/code>,&nbsp;<code>ssp_messagebus_interface.c<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Harvester-ComponentInteractions\">Component Interactions<\/h2>\n\n\n\n<p>Harvester maintains interactions with RDK-B middleware components for configuration management and telemetry transmission, WiFi subsystems for data collection, and cloud management systems for upstream reporting.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-InteractionMatrix\">Interaction Matrix<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Target Component\/Layer<\/strong><\/td><td><strong>Interaction Purpose<\/strong><\/td><td><strong>Key APIs\/Endpoints<\/strong><\/td><\/tr><tr><td><strong>RDK-B Middleware Components<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>CcspPsm<\/td><td>Configuration parameter persistence and retrieval for polling periods, reporting intervals, enable flags, and default values<\/td><td><code>PSM_Get_Record_Value2()<\/code>,&nbsp;<code>PSM_Set_Record_Value2()<\/code><\/td><\/tr><tr><td>CcspWebPA\/Parodus<\/td><td>Upstream telemetry message transmission to cloud analytics using WRP protocol with Avro-encoded binary payloads<\/td><td><code>libparodus_send()<\/code>,&nbsp;<code>libparodus_init()<\/code>,&nbsp;<code>sendWebpaMsg()<\/code><\/td><\/tr><tr><td>CcspWiFiAgent\/OneWifi<\/td><td>Indirect interaction through WiFi HAL for device association queries and radio statistics when not using OneWifi R-BUS mode<\/td><td>WiFi HAL function invocations<\/td><\/tr><tr><td><strong>System &amp; HAL Layers<\/strong><\/td><td><\/td><td><\/td><\/tr><tr><td>WiFi HAL<\/td><td>Retrieve associated device information, radio interface statistics, and neighboring AP scan results through HAL APIs<\/td><td><code>wifi_getAssociatedDeviceDetail()<\/code>,&nbsp;<code>wifi_getRadioTrafficStats2()<\/code>,&nbsp;<code>wifi_getNeighboringWiFiDiagnosticResult2()<\/code><\/td><\/tr><tr><td>R-BUS<\/td><td>Query WiFi device and radio data through R-BUS messaging when OneWifi feature is enabled providing abstraction over HAL<\/td><td><code>R-BUS_get()<\/code>,&nbsp;<code>R-BUS_getExt()<\/code>, R-BUS property queries<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Events Published by Harvester:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Event Name<\/strong><\/td><td><strong>Event Topic\/Path<\/strong><\/td><td><strong>Trigger Condition<\/strong><\/td><td><strong>Subscriber Components<\/strong><\/td><\/tr><tr><td>Telemetry Report<\/td><td>WebPA WRP Message<\/td><td>Reporting period expiration with collected data ready for transmission<\/td><td>CcspWebPA\/Parodus forwards to cloud<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-IPCFlowPatterns\">IPC Flow Patterns<\/h3>\n\n\n\n<p><strong>Primary IPC Flow &#8211; Telemetry Collection with WebPA Messaging:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Harvester as Harvester Collection Thread\n    participant HAL as WiFi HAL\n    participant Avro as Avro Encoder\n    participant Handler as WebPA Handler Thread\n    participant Parodus as Parodus Daemon\n    participant Cloud as Cloud Server\n    \n    Note over Handler: Startup: Create Parodus Handler Thread\n    Handler->>Handler: Continuous Connection Loop\n    Handler->>Parodus: libparodus_init() via Nanomsg\n    Parodus-->>Handler: Connection Established\n    \n    loop Polling Interval\n        Harvester->>HAL: wifi_getAssociatedDeviceDetail()\n        HAL-->>Harvester: Device Array\n        Harvester->>Harvester: Process and Store Data\n    end\n    \n    Note over Harvester: Reporting Period Expires\n    Harvester->>Avro: Encode Telemetry to Binary\n    Avro-->>Harvester: Avro Payload with Schema ID\n    Harvester->>Harvester: Construct WRP Event Message\n    Harvester->>Harvester: Set msg_type, payload, source, dest, content_type\n    \n    loop Retry Attempts (up to 5 times)\n        Harvester->>Harvester: Acquire webpa_mutex\n        Harvester->>Parodus: libparodus_send(client_instance, wrp_msg)\n        Parodus-->>Harvester: sendStatus\n        Harvester->>Harvester: Release webpa_mutex\n        \n        alt sendStatus == 0 (Success)\n            Note over Harvester: Parodus Accepted Message\n            Harvester->>Harvester: Break Retry Loop\n            Note over Parodus,Cloud: Parodus Handles Cloud Delivery\n            Parodus->>Cloud: Forward WRP Message\n        else sendStatus != 0 (Failed)\n            Note over Harvester: Parodus Send Failed\n            Harvester->>Harvester: Calculate backoff: 2^c - 1 seconds\n            Harvester->>Harvester: sleep(backoffRetryTime)\n            Harvester->>Harvester: Increment retry_count\n            Note over Harvester: Retry if count &lt;= 5\n        end\n    end\n    \n    Harvester->>Harvester: Free WRP Message\n    Harvester->>Harvester: Return to Collection Thread<\/pre><\/div>\n\n\n\n<p><strong>Event Notification Flow:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">sequenceDiagram\n    participant Client as TR-181 Client\n    participant DM as Data Model\n    participant IDW as IDW Thread\n    participant PSM as PSM\n    \n    Client->>DM: Set Enabled=true\n    DM->>PSM: Store Parameter\n    PSM-->>DM: Success\n    DM->>IDW: Signal Thread Start\n    IDW->>IDW: Initialize Polling Timer\n    IDW-->>DM: Thread Running\n    DM-->>Client: Parameter Set Success<\/pre><\/div>\n\n\n\n<p><strong>Implementation Details<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-MajorHALAPIsIntegration\">Major HAL APIs Integration<\/h3>\n\n\n\n<p>Harvester integrates with WiFi HAL APIs to retrieve telemetry data for associated devices, radio statistics, and neighboring access point information with conditional R-BUS&nbsp;based access when OneWifi is enabled.<\/p>\n\n\n\n<p><strong>Core HAL APIs:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>HAL API<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Implementation File<\/strong><\/td><\/tr><tr><td><code>wifi_getAssociatedDeviceDetail()<\/code><\/td><td>Retrieve detailed information about devices associated with specific SSID including MAC, signal strength, rates, and connection time<\/td><td><code>harvester_associated_devices.c<\/code><\/td><\/tr><tr><td><code>wifi_getRadioTrafficStats2()<\/code><\/td><td>Collect radio-level traffic statistics including channel utilization, transmission counts, retry statistics, and error rates<\/td><td><code>harvester_radio_traffic.c<\/code><\/td><\/tr><tr><td><code>wifi_getNeighboringWiFiDiagnosticResult2()<\/code><\/td><td>Perform channel scan and retrieve information about detected neighboring access points<\/td><td><code>harvester_neighboring_ap.c<\/code><\/td><\/tr><tr><td><code>wifi_getSSIDNumberOfEntries()<\/code><\/td><td>Query the number of configured SSIDs for iterating through all access points<\/td><td><code>harvester_associated_devices.c<\/code><\/td><\/tr><tr><td><code>wifi_getRadioNumberOfEntries()<\/code><\/td><td>Query the number of radio interfaces for iterating through all radios<\/td><td><code>harvester_radio_traffic.c<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>RBus Integration for OneWifi:<\/strong><\/p>\n\n\n\n<p>When OneWifi feature is enabled, Harvester uses RBus queries instead of direct HAL calls through the RBus API module:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>RBUS Query<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Implementation File<\/strong><\/td><\/tr><tr><td><code>rbus_get()<\/code><\/td><td>Retrieve WiFi configuration and operational data from OneWifi using RBus property paths<\/td><td><code>harvester_rbus_api.c<\/code><\/td><\/tr><tr><td><code>rbus_getExt()<\/code><\/td><td>Extended RBus query for complex data structures and bulk property retrieval<\/td><td><code>harvester_rbus_api.c<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-AvroSchemaandSerialization\">Avro Schema and Serialization<\/h3>\n\n\n\n<p>Harvester uses Apache Avro for efficient binary serialization of telemetry data with schema validation:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Schema Files<\/strong>: Avro schema definitions stored in&nbsp;<code>\/usr\/ccsp\/harvester\/<\/code>&nbsp;directory including&nbsp;<code>InterfaceDevicesWifi.avsc<\/code>,&nbsp;<code>RadioInterfacesStatistics.avsc<\/code>,&nbsp;<code>GatewayAccessPointNeighborScanReport.avsc<\/code><\/li>\n\n\n\n<li><strong>Schema Loading<\/strong>: Avro schemas loaded at runtime during component initialization and cached for encoding operations<\/li>\n\n\n\n<li><strong>Message Format<\/strong>: Binary encoded messages prefixed with magic number (0x85) and 32-byte schema ID hash for validation<\/li>\n\n\n\n<li><strong>Encoding Process<\/strong>: Telemetry data structures marshalled into Avro format using writer buffers with automatic memory management<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-ConfigurationPersistence\">Configuration Persistence<\/h3>\n\n\n\n<p>Harvester stores configuration parameters in PSM with the following key patterns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code><a href=\"http:\/\/ert.com\/\">eRT.com<\/a>.cisco.spvtg.ccsp.harvester.InterfaceDevicesWifiEnabled<\/code><\/li>\n\n\n\n<li><code><a href=\"http:\/\/ert.com\/\">eRT.com<\/a>.cisco.spvtg.ccsp.harvester.InterfaceDevicesWifiPollingPeriod<\/code><\/li>\n\n\n\n<li><code><a href=\"http:\/\/ert.com\/\">eRT.com<\/a>.cisco.spvtg.ccsp.harvester.InterfaceDevicesWifiReportingPeriod<\/code><\/li>\n\n\n\n<li>Similar patterns for RadioInterfaceStatistics and NeighboringAP report types<\/li>\n\n\n\n<li>Default values stored separately with override TTL mechanism for temporary configuration changes<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-KeyImplementationLogic\">Key Implementation Logic<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Telemetry Collection Engine<\/strong>: Multi-threaded polling system with independent collection threads for each report type implementing producer-consumer pattern with configurable polling intervals validated against predefined acceptable values. Thread lifecycle management with conditional variables for timer-based polling and graceful shutdown handling. State machine implementation tracking collection thread status transitions between idle, active, and suspended states.<\/li>\n\n\n\n<li><strong>Event Processing<\/strong>: Asynchronous message transmission through WebPA\/Parodus with retry logic and exponential backoff for failed transmissions. Queue management for telemetry reports when cloud connectivity is unavailable with persistent buffering during extended outages. Parameter validation engine ensuring polling period less than or equal to reporting period and restricting values to supported intervals defined in source code arrays.<\/li>\n\n\n\n<li><strong>Error Handling Strategy<\/strong>: Comprehensive error detection and recovery mechanisms ensuring system stability during WiFi HAL failures, WebPA connection losses, and resource constraints. Automatic retry logic with configurable backoff for transient HAL errors. Graceful degradation when telemetry transmission fails with local buffering and notification logging. Health monitoring logging telemetry collection success rates and transmission statistics for operational visibility.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"Harvester-KeyConfigurationFiles\">Key Configuration Files<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configuration File<\/strong><\/td><td><strong>Purpose<\/strong><\/td><td><strong>Override Mechanisms<\/strong><\/td><\/tr><tr><td><code>Harvester.XML<\/code><\/td><td>TR-181 parameter definitions and DML function mappings for telemetry report configuration<\/td><td>Component compilation flags, runtime parameter updates<\/td><\/tr><tr><td><code>InterfaceDevicesWifi.avsc<\/code><\/td><td>Avro schema definition for associated WiFi device telemetry report structure<\/td><td>Schema version updates, cloud-side schema registry<\/td><\/tr><tr><td><code>RadioInterfacesStatistics.avsc<\/code><\/td><td>Avro schema definition for radio interface performance metrics report structure<\/td><td>Schema version updates, cloud-side schema registry<\/td><\/tr><tr><td><code>GatewayAccessPointNeighborScanReport.avsc<\/code><\/td><td>Avro schema definition for neighboring AP scan results report structure<\/td><td>Schema version updates, cloud-side schema registry<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Harvester is an RDK-B telemetry component responsible for collecting and reporting WiFi metrics and statistics [&hellip;]<\/p>\n","protected":false},"author":28,"featured_media":0,"parent":9575,"menu_order":20,"comment_status":"open","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"class_list":["post-9695","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Harvester - RDK Documentation Portal | Documentation<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Harvester - RDK Documentation Portal | Documentation\" \/>\n<meta property=\"og:description\" content=\"Harvester is an RDK-B telemetry component responsible for collecting and reporting WiFi metrics and statistics [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/\" \/>\n<meta property=\"og:site_name\" content=\"RDK Documentation Portal | Documentation\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-30T08:51:59+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/\",\"name\":\"Harvester - RDK Documentation Portal | Documentation\",\"isPartOf\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\"},\"datePublished\":\"2022-06-21T13:53:02+00:00\",\"dateModified\":\"2026-03-30T08:51:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Documentation\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"RDK Broadband\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Components\",\"item\":\"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/\"},{\"@type\":\"ListItem\",\"position\":5,\"name\":\"Harvester\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/developer.rdkcentral.com\/documentation\/#website\",\"url\":\"https:\/\/developer.rdkcentral.com\/documentation\/\",\"name\":\"RDK Documentation Portal | Documentation\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Harvester - RDK Documentation Portal | Documentation","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/","og_locale":"en_US","og_type":"article","og_title":"Harvester - RDK Documentation Portal | Documentation","og_description":"Harvester is an RDK-B telemetry component responsible for collecting and reporting WiFi metrics and statistics [&hellip;]","og_url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/","og_site_name":"RDK Documentation Portal | Documentation","article_modified_time":"2026-03-30T08:51:59+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/","url":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/","name":"Harvester - RDK Documentation Portal | Documentation","isPartOf":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website"},"datePublished":"2022-06-21T13:53:02+00:00","dateModified":"2026-03-30T08:51:59+00:00","breadcrumb":{"@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/harvester\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":2,"name":"Documentation","item":"https:\/\/developer.rdkcentral.com\/documentation\/"},{"@type":"ListItem","position":3,"name":"RDK Broadband","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/"},{"@type":"ListItem","position":4,"name":"Components","item":"https:\/\/developer.rdkcentral.com\/documentation\/documentation\/rdk_broadband_documentation\/components\/"},{"@type":"ListItem","position":5,"name":"Harvester"}]},{"@type":"WebSite","@id":"https:\/\/developer.rdkcentral.com\/documentation\/#website","url":"https:\/\/developer.rdkcentral.com\/documentation\/","name":"RDK Documentation Portal | Documentation","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/developer.rdkcentral.com\/documentation\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/comments?post=9695"}],"version-history":[{"count":6,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9695\/revisions"}],"predecessor-version":[{"id":12852,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9695\/revisions\/12852"}],"up":[{"embeddable":true,"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/pages\/9575"}],"wp:attachment":[{"href":"https:\/\/developer.rdkcentral.com\/documentation\/wp-json\/wp\/v2\/media?parent=9695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}