Observability

UPS data appears on non‑UPS devices (Power Control Unit Status widget and UPS inventory) in SolarWinds Platform

This article provides information about a SolarWinds Platform symptom where UPS (Power Control Unit) data appears on non‑UPS devices, such as switches or routers. Affected environments may see the Power Control Unit Status widget on non‑UPS node details pages and non‑UPS devices listed in UPS inventory, even though those devices are not UPS hardware.

First published date

3/6/2026 8:39 PM

Last published date

3/6/2026 8:39 PM

Overview

Symptoms

In affected environments, you may observe one or more of the following:

  • On the Node Details view for a nonUPS node (for example, a switch SW-CORE-01.example.local), the Power Control Unit Status widget is visible and shows UPS information (model, serial number, battery metrics, output status, etc.), even though the device is not a UPS.
  • In Manage Nodes or a UPS/Power Control Unit inventory report, nonUPS devices appear with UPSrelated attributes, such as:
    • Name: APC UPS
    • Model: Smart-UPS SRT 5000
    • Serial Number: identical to a known UPS node
  • This behavior is often noticed after an upgrade to a newer SolarWinds Platform core version (for example, from an earlier 2024.x build to a 2025.x build), when PCU/UPS functionality is migrated and discovery is rerun.

Example patterns you might see:

  • Node Details page for a switch:
    • Device caption: SW-ACCESS-01
    • Machine type: Cisco Catalyst XXXX
    • Power Control Unit Status widget present, showing a UPS model and serial number.
  • Database / SWQL examples (generic):
    • PowerControlUnitData_man_1 contains rows such as:
      ID   Name     SerialNumber     Model               FirmwareVersion
      ---  -------  ---------------  ------------------  ----------------
      101  APC UPS  AS1234567890     Smart-UPS SRT 5000  UPS 16.0 (ID1044)
      205  APC UPS  AS1234567890     Smart-UPS SRT 5000  UPS 16.0 (ID1044)
      where ID = 101 is a real UPS node and ID = 205 is a nonUPS device (for example, a switch).
    • Pollers table contains entries such as:
      PollerType                  NetObject   NetObjectType   NetObjectID
      --------------------------  ----------  -------------   -----------
      PCU.Statistics.SNMP.Generic PCU:101     PCU             101
      PCU.Statistics.SNMP.Generic PCU:205     PCU             205
      indicating that both the UPS and the nonUPS node have a PCU poller.

These symptoms indicate that UPS (Power Control Unit) entities and pollers are attached to Node IDs that represent nonUPS devices. Once this association exists, the standard Node Details view and UPS inventory will treat those nodes as UPS hosts.

Product section

Hybrid Cloud Observability

Cause

Highlevel cause

  • SolarWinds’ UPS/PCU feature determines that a node “has a UPS” by polling specific APC PowerNet MIB OIDs during discovery. If the device responds correctly to a set of APC UPS identity OIDs, it creates a PCU entity and assigns a PCU.Statistics.SNMP.Generic poller to that node.
  • A bug in the PCU discovery process with autoimport can leave stale discovered PCU records in the database and then map them to different SNMP nodes on subsequent discovery runs. As a result, nonUPS devices may inherit UPS entities and pollers that actually belong to a real UPS.

Technical details

  1. PCU discovery logic (PCUInventoryStep / PcuSnmpInventory)
    • For any SNMPcapable node, the PCU discovery step polls the following APC OIDs (examples, all under 1.3.6.1.4.1.318):
      • UPS Name: 1.3.6.1.4.1.318.1.1.1.1.1.2.0
      • UPS Model: 1.3.6.1.4.1.318.1.1.1.1.1.1.0
      • UPS Serial Number: 1.3.6.1.4.1.318.1.1.1.1.2.3.0
      • UPS Firmware Version: 1.3.6.1.4.1.318.1.1.1.1.2.1.0
      • UPS Manufacture Date/Time: 1.3.6.1.4.1.318.1.1.1.1.2.2.0
    • If the device responds successfully to these OIDs, the discovery logic treats the node as hosting a Power Control Unit (UPS) and:
      • Creates a PCU record with an ID equal to the node’s NodeID.
      • Assigns a PCU poller (PCU.Statistics.SNMP.Generic) with NetObjectType = 'PCU' and NetObjectID = NodeID.
  2. Node Details view and UPS inventory behavior
    • The Power Control Unit Status widget on Node Details is part of a generic node view. It doesn’t redetect UPS devices itself; it simply checks whether a PCU entity is present for the current NodeID and whether its poll state is not disabled.
    • Similarly, UPS inventory and related reports are built from the same PCU data tables/entities and do not perform their own hardwaretype validation.
  3. Discovery bug with autoimport (PCU misassignment)
    • Under certain conditions, especially with scheduled Network Sonar Discovery jobs using autoimport, older entries in the discovered PCU table can be left behind and then remapped to new discovery results for different nodes on subsequent runs.
    • This can cause one physical UPS to be associated with multiple NodeIDs (for example, a real UPS node and one or more switches), all sharing the same UPS model/serial in PowerControlUnitData_man_1.
    • Once the wrong NodeIDs have PCU entities and PCU pollers, the product correctly displays UPS data for those NodeIDs—even though they represent nonUPS hardware.

Resolution

Important considerations

  • Back up the SolarWinds database before making any changes.
  • The scripts below are examples only and are provided AS IS. They are not covered under any SolarWinds support program or service.

  • If you are not comfortable running SQL directly against the SolarWinds Platform database, engage your database administrator

    The resolution has three parts:

    1. Confirm which nodes are misclassified as UPS.
    2. Clean up incorrect PCU entities and pollers for those nodes.
    3. Optionally, reduce the chance of recurrences until you upgrade to a build that contains the fix.

    Step 1 – Identify misclassified nodes

    You can use either SQL (on the SolarWinds Platform database) or SWQL (via SWQL Studio/SDK) to locate nodes that have PCU pollers and PCU data.

    1.1 Find NodeIDs that have PCU pollers

    SELECT DISTINCT NetObjectID AS NodeID
    FROM Pollers
    WHERE NetObjectType = 'PCU';

    Crosscheck each NodeID in the Nodes table (or via the SolarWinds Platform web console) to identify which devices are truly UPS hardware and which are nonUPS (such as switches, routers, hypervisors, etc.).

    1.2 Check PCU data for those NodeIDs

    SELECT ID, Name, SerialNumber, Model, FirmwareVersion, ManufactureDateTime
    FROM PowerControlUnitData_man_1
    WHERE ID IN (<list_of_NodeIDs_from_query_above>);

    Look for cases where the same UPS model and serial number appear for more than one ID, especially where one ID corresponds to UPS hardware and another ID corresponds to a nonUPS device.

    Make a list of NodeIDs that are not UPS devices but have PCU data and PCU pollers. These are the misclassified nodes you will clean up.

     

    Step 2 – Remove PCU data and pollers from nonUPS nodes

    Warning: The following queries will permanently delete UPS/PCU entries for the specified NodeIDs. Run them only for NodeIDs you have confirmed are not UPS devices.

    Assume you identified a set of nonUPS NodeIDs such as:

    NodeID: 205, 310, 412

    2.1 Remove PCU statistics for those NodeIDs

    -- Scripts are not supported under any SolarWinds support program or service.
    -- Scripts are provided AS IS without warranty of any kind. SolarWinds further
    -- disclaims all warranties including, without limitation, any implied warranties
    -- of merchantability or of fitness for a particular purpose. The risk arising
    -- out of the use or performance of the scripts and documentation stays with you.
    -- In no event shall SolarWinds or anyone else involved in the creation,
    -- production, or delivery of the scripts be liable for any damages whatsoever
    -- (including, without limitation, damages for loss of business profits, business
    -- interruption, loss of business information, or other pecuniary loss) arising
    -- out of the use of or inability to use the scripts or documentation.
    
    DELETE s
    FROM PowerControlUnitStatistics_1 s
    JOIN PowerControlUnitData_man_1 d ON s.ID = d.ID
    WHERE d.ID IN (205, 310, 412);

    2.2 Remove PCU identity rows (main PCU records)

    -- Scripts are not supported under any SolarWinds support program or service.
    -- Scripts are provided AS IS without warranty of any kind. SolarWinds further
    -- disclaims all warranties including, without limitation, any implied warranties
    -- of merchantability or of fitness for a particular purpose. The risk arising
    -- out of the use or performance of the scripts and documentation stays with you.
    -- In no event shall SolarWinds or anyone else involved in the creation,
    -- production, or delivery of the scripts be liable for any damages whatsoever
    -- (including, without limitation, damages for loss of business profits, business
    -- interruption, loss of business information, or other pecuniary loss) arising
    -- out of the use of or inability to use the scripts or documentation.
    
    DELETE FROM PowerControlUnitData_man_1
    WHERE ID IN (205, 310, 412);

    2.3 Remove PCU pollers attached to these NodeIDs

    -- Scripts are not supported under any SolarWinds support program or service.
    -- Scripts are provided AS IS without warranty of any kind. SolarWinds further
    -- disclaims all warranties including, without limitation, any implied warranties
    -- of merchantability or of fitness for a particular purpose. The risk arising
    -- out of the use or performance of the scripts and documentation stays with you.
    -- In no event shall SolarWinds or anyone else involved in the creation,
    -- production, or delivery of the scripts be liable for any damages whatsoever
    -- (including, without limitation, damages for loss of business profits, business
    -- interruption, loss of business information, or other pecuniary loss) arising
    -- out of the use of or inability to use the scripts or documentation.
    
    DELETE FROM Pollers
    WHERE NetObjectType = 'PCU'
      AND NetObjectID IN (205, 310, 412);

    2.4 Restart polling services

    After the cleanup:

    1. Restart the Job Engine / Collector services (or the polling engine services) on the main and any additional polling engines hosting those nodes.
    2. Allow a few polling cycles to complete.

    Expected outcome:

    • The affected nonUPS nodes no longer have PCU entities or PCU pollers.
    • The Power Control Unit Status widget autohides on their Node Details pages.
    • These nodes no longer appear in UPS / Power Control Unit inventory.

    Step 3 – (Optional) Mitigation for scheduled discoveries with autoimport

    Until you can upgrade to a version that contains the discovery fix, you can reduce the chance of misassignment recurring on scheduled Network Sonar Discovery jobs with autoimport.

    The idea is to clear discovered PCU results for specific discovery profiles before they run, so each run starts from a clean state.

    Note: Column names and table structure can vary. Validate in your environment before using this pattern.

    Example pattern:

    -- Scripts are not supported under any SolarWinds support program or service.
    -- Scripts are provided AS IS without warranty of any kind. SolarWinds further
    -- disclaims all warranties including, without limitation, any implied warranties
    -- of merchantability or of fitness for a particular purpose. The risk arising
    -- out of the use or performance of the scripts and documentation stays with you.
    -- In no event shall SolarWinds or anyone else involved in the creation,
    -- production, or delivery of the scripts be liable for any damages whatsoever
    -- (including, without limitation, damages for loss of business profits, business
    -- interruption, loss of business information, or other pecuniary loss) arising
    -- out of the use of or inability to use the scripts or documentation.
    
    -- Replace <ProfileID> with the Discovery Profile ID of the affected auto-import job.
    DELETE FROM DiscoveredPowerControlUnitsData_man_1
    WHERE DiscoveryProfileID = <ProfileID>;

    You can:

    • Schedule this as a SQL Agent job to run shortly before the corresponding discovery job, or
    • Coordinate manual execution prior to each test if you are troubleshooting.

    This does not fix existing misclassified nodes (you still need Step 2), but it can reduce the chance of new nonUPS nodes being misassigned as UPS by stale discovery results.

    Step 4 – Longterm recommendation (upgrade)

    Once a SolarWinds Platform version is available that contains the PCU discovery fix, upgrade to that version to address the underlying discovery behavior. This will help prevent new misassignments during scheduled discovery and autoimport.

    Refer to the SolarWinds release notes for details on PCU/UPS discovery fixes and verify whether your target version includes the relevant correction.

     

    Optional: bulk cleanup by vendor (advanced)

    Use this option only when many nonUPS nodes are affected and you have confirmed which vendors correspond to real UPS devices in the environment.

    By default, the examples below preserve nodes whose Vendor is one of:

    • American Power Conversion Corp.
    • Eaton Corporation
    • Emerson Computer Power

    All other vendors will have their PCU data and PCU pollers removed.

    Important: Adjust the vendor list if the customer uses additional UPS vendors. See the note at the end of this section.

    2.5 Preview what will be removed

    Run this query first to see which nodes would be affected:

    SELECT d.ID       AS NodeID,
           n.Caption  AS NodeCaption,
           n.Vendor
    FROM PowerControlUnitData_man_1 d
    JOIN NodesData n ON d.ID = n.NodeID
    WHERE n.Vendor NOT IN (
      'American Power Conversion Corp.',
      'Eaton Corporation',
      'Emerson Computer Power'
    );
    

    Review the results with the customer and confirm that all listed nodes are nonUPS devices and that real UPS nodes are not included.

    2.6 Bulk cleanup for nonwhitelisted vendors

    If the preview is correct and a full database backup exists, you can run the following scripts.

    If the preview is correct and a full database backup exists, you can run the following scripts.
    -- Scripts are not supported under any SolarWinds support program or service.
    -- Scripts are provided AS IS without warranty of any kind. SolarWinds further
    -- disclaims all warranties including, without limitation, any implied warranties
    -- of merchantability or of fitness for a particular purpose. The risk arising
    -- out of the use or performance of the scripts and documentation stays with you.
    -- In no event shall SolarWinds or anyone else involved in the creation,
    -- production, or delivery of the scripts be liable for any damages whatsoever
    -- (including, without limitation, damages for loss of business profits, business
    -- interruption, loss of business information, or other pecuniary loss) arising
    -- out of the use of or inability to use the scripts or documentation.
    -- Remove PCU statistics for non-whitelisted vendors
    DELETE s
    FROM PowerControlUnitStatistics_1 s
    JOIN PowerControlUnitData_man_1 d ON s.ID = d.ID
    JOIN NodesData n ON d.ID = n.NodeID
    WHERE n.Vendor NOT IN (
      'American Power Conversion Corp.',
      'Eaton Corporation',
      'Emerson Computer Power'
    );
    -- Remove PCU identity rows for non-whitelisted vendors
    DELETE d
    FROM PowerControlUnitData_man_1 d
    JOIN NodesData n ON d.ID = n.NodeID
    WHERE n.Vendor NOT IN (
      'American Power Conversion Corp.',
      'Eaton Corporation',
      'Emerson Computer Power'
    );
    -- Remove PCU pollers for non-whitelisted vendors
    DELETE p
    FROM Pollers p
    JOIN NodesData n ON p.NetObjectID = n.NodeID
    WHERE p.PollerType   = 'PCU.Statistics.SNMP.Generic'
      AND p.NetObjectType = 'PCU'
      AND n.Vendor NOT IN (
        'American Power Conversion Corp.',
        'Eaton Corporation',
        'Emerson Computer Power'
      );

    After running the bulk cleanup, restart the Job Engine / Collector services and verify that:

    • NonUPS nodes no longer show Power Control Unit Status or appear in UPS inventory.
    • Genuine UPS nodes (for the allowed vendors) still have valid UPS data and widgets.

    2.7 Note about other UPS vendors

    The vendor filter in this script excludes all devices whose Vendor is not in the whitelist from having PCU data. If the customer uses other UPS vendors beyond:

    • American Power Conversion Corp.
    • Eaton Corporation
    • Emerson Computer Power

    then do not run the bulk cleanup without adjustment.

    In that case:

    1. Ask the customer to provide:
      • An SNMP walk of at least one correctly discovered UPS device for each additional vendor.
      • Exports of the following tables from the SolarWinds Platform database:
        SELECT * FROM DiscoveredPowerControlUnitsData_man_1;
        SELECT * FROM DiscoveredNodes;

    2. Use these exports and the SNMP walks to verify:
      • How those additional UPS vendors identify themselves (Vendor values), and
      • Whether they respond to the PCU OIDs and should be preserved by the script.
    3. Once confirmed, add the exact vendor strings for those UPS devices into the NOT IN (...) whitelist before running the DELETE statements.

    If you are unsure, prefer the NodeIDbased cleanup earlier in this step rather than the vendorbased bulk method.

    Step 3 – (Optional) Mitigation for scheduled discoveries with autoimport

    Until you can upgrade to a version that contains the discovery fix, you can reduce the chance of misassignment recurring on scheduled Network Sonar Discovery jobs with autoimport.

    The idea is to clear discovered PCU results for specific discovery profiles before they run, so each run starts from a clean state.

    Note: Column names and table structure can vary. Validate in your environment before using this pattern.

    Example pattern:

    -- Replace <ProfileID> with the Discovery Profile ID of the affected auto-import job.
    DELETE FROM DiscoveredPowerControlUnitsData_man_1
    WHERE ProfileID = <ProfileID>;

    You can:

    • Schedule this as a  SQL Agent job to run shortly before the corresponding discovery job, or
    • Coordinate manual execution prior to each test if you are troubleshooting.

    This does not fix existing misclassified nodes (you still need Step 2), but it can reduce the chance of new nonUPS nodes being misassigned as UPS by stale discovery results.

    Step 4 – Longterm recommendation (upgrade)

    Once a SolarWinds Platform version is available that contains the PCU discovery fix, upgrade to that version to address the underlying discovery behavior. This will help prevent new misassignments during scheduled discovery and autoimport.

    Node that the discovery bug is corrected, so new misassignments of UPS/PCU to nonUPS nodes should no longer occur. However, any existing misassigned UPS/PCU records and pollers are not automatically removed during upgrade. If you still see nonUPS devices with UPS widgets or in UPS inventory after upgrading, run the onetime cleanup in Step 2 – Remove PCU data and pollers from nonUPS nodes.

    Refer to the SolarWinds release notes for details on PCU/UPS discovery fixes and verify whether your target version includes the relevant correction.