diff --git a/lib/pdu/cyber.robot b/lib/pdu/cyber.robot
new file mode 100644
index 0000000..3788d3d
--- /dev/null
+++ b/lib/pdu/cyber.robot
@@ -0,0 +1,182 @@
+*** Settings ***
+Documentation   Cyber Power Distribution Unit (PDU) library
+
+Resource        ../../lib/pdu/pdu.robot
+Library         Telnet
+Library         SSHLibrary
+
+*** Keywords ***
+Login To Cyber PDU Via SSH
+    [Documentation]  Open PDU connection and login via SSH.
+
+    Validate Prereq
+    SSHLibrary.Open Connection  ${PDU_IP}
+    ${connection_status}=  Run Keyword And Return Status
+    ...  SSHLibrary.Login  ${PDU_USERNAME}  ${PDU_PASSWORD}
+    Return From Keyword  ${connection_status}
+
+
+Login To Cyber PDU Via Telnet
+    [Documentation]  Open PDU connection and login via telnet.
+
+    # CyberPowerSystems Inc., Command Shell v1.0
+    # Login Name: cyber
+    # Login_Pass: cyber
+
+    Validate Prereq
+    Telnet.Open Connection  ${PDU_IP}  timeout=5
+    Set Telnetlib Log Level  TRACE
+    Telnet.Set Newline  \r
+    Telnet.Write  \n
+    Telnet.Write  ${PDU_USERNAME}
+
+    Telnet.Read Until  Login_Pass:
+    Telnet.Write  ${PDU_PASSWORD}
+
+Power Cycle
+    [Documentation]  Perform PDU power cycle.
+    [Teardown]  Run Keyword  ${lib_name}.Close All Connections
+
+    ${connection_status}=  Login To Cyber PDU Via SSH
+
+    IF  '${connection_status}' == '${False}'
+        Set Test Variable  ${lib_name}  Telnet
+        Login To Cyber PDU Via Telnet
+    ELSE
+        Set Test Variable  ${lib_name}  SSHLibrary
+    END
+
+    #Sample output from cyber PDU console
+
+    # CyberPower System                        ePDU Firmware Version    2.210
+    # (c) Copyright 2010 All Rights Reserved   PDU30SWHVT16FNET
+    # +------- Information -------------------------------------------------------+
+    # Name     : PDU30SWHVT16FNET              Date : 07/05/2022
+    # Contact  : Administrator                 Time : 22:01:49
+    # Location : Server Room                   User : Admin
+    # Up Time  : 178 days 22 hours 29 mins 11 secs.
+    # +------- Console -----------------------------------------------------------+
+
+    #     1- Device Manager
+    #     2- Network Settings
+    #     3- System
+    #     4- Logout
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 1
+
+    # +------- PDU30SWHVT16FNET --------------------------------------------------+
+
+    #     EPDU Information
+    #     -----------------------------------------------------------------------
+    #     Meter or Switch  : Switched          Model Enclosure      : 2U
+    #     EPDU Orientation : Horizontal        Circuit Breaker      : Yes
+    #     Bank Number      : 2                 Outlet Number        : 16
+    #     -----------------------------------------------------------------------
+
+    #     1- Load Manager
+    #     2- Outlet Control
+    #     3- Outlet Configuration
+    #     4- Outlet User Management
+    #     5- See Schedule
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 2
+
+    # +------- Outlet Control ----------------------------------------------------+
+
+    #     Outlet Status:
+    #     ---------------------------------------------------------------------
+    #     Outlet Number  :   1   2   3   4   5   6   7   8   9  10  11  12
+    #     Current State  :  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON  ON
+    #     ---------------------------------------------------------------------
+    #     Outlet Number  :  13  14  15  16  17  18  19  20  21  22  23  24
+    #     Current State  :  ON  ON  ON  ON
+
+    #     1- Start a Control Command
+
+    #     <ESC>- Back, <ENTER>- Select&Reflash
+    # > 1
+
+        # +------- Command Information: Step 1 ---------------------------------------+
+
+    #     Step1. Input a Single outlet or outlet list with outlet index #.
+    #     Note. Separate by symbol ','.
+
+    #     <ESC>- Cancel
+    # > 13, 14
+
+    # +------- Command Information: Step 2 ---------------------------------------+
+
+    #     Selected Outlet:
+    #     16
+
+    #     Step2. Select command to execute
+    #     Selection:
+    #     1- Turn On Immediate
+    #     2- Turn Off Immediate
+    #     3- Reboot Immediate
+    #     4- Turn On Delay
+    #     5- Turn Off Delay
+    #     6- Reboot Delay
+    #     7- Cancel Pending Command
+
+    #     <ESC>- Cancel
+    # >
+
+    # +------- Command Information: Step 3 ---------------------------------------+
+
+    #     Selected Outlet:
+    #     16
+
+    #     with Command:
+    #     Cancel Pending Command
+
+    #     Step3. Confirm your command.
+    #     Note. Input 'yes' to Execute.
+
+    #     <ESC>- Cancel
+    # > yes
+
+    # Select 1- Device Manager
+    Run Keyword  ${lib_name}.Read
+    Run Keyword  ${lib_name}.Write  1
+
+    # Select 2- Outlet Control
+    Run Keyword  ${lib_name}.Read
+    Run Keyword  ${lib_name}.Write  2
+
+    @{outlets}=  Split String  ${PDU_SLOT_NO}  separator=,
+    FOR  ${outlet}  IN  @{outlets}
+        # Select 1- Start a Control Command
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  1
+
+        # Input a Single outlet or outlet list with outlet index #
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  ${outlet}
+
+        # Select command to execute 3- Reboot Immediate
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  3
+
+        # Input 'yes' to Execute
+        Run Keyword  ${lib_name}.Read
+        Run Keyword  ${lib_name}.Write  yes
+        Run Keyword  ${lib_name}.Read
+    END
+
+    # Send ESC over telnet console and Select 4- Logout
+    ${esc}=  Evaluate  chr(int(27))
+    Set Test Variable  ${retry_count}  ${10}
+    FOR  ${try}  IN RANGE  ${retry_count}
+        Run Keyword  ${lib_name}.Write Bare  ${esc}
+        ${cmd_out}=  Run Keyword  ${lib_name}.Read
+        ${check}=  Run Keyword And Return Status  Should Contain  ${cmd_out}  4- Logout
+        Continue For Loop If  ${check}==${FALSE}
+        Run Keyword If  ${check}==${TRUE}  Run Keywords
+        ...  Run Keyword  ${lib_name}.Write  4  AND
+        ...  Run Keyword  ${lib_name}.Read  AND
+        ...  ${lib_name}.Close All Connections  AND
+        ...  Exit For Loop
+    END
\ No newline at end of file
