diff --git a/lib/ipmi_client.robot b/lib/ipmi_client.robot
index 282a3bb..1a1a458 100755
--- a/lib/ipmi_client.robot
+++ b/lib/ipmi_client.robot
@@ -434,3 +434,104 @@
         Run IPMI Standard Command   user set name ${user_record['user_id']} ""
         Sleep  5s
     END
+
+
+Create SEL
+    [Documentation]  Create a SEL.
+    [Arguments]  ${sensor_type}  ${sensor_number}
+
+    # Create a SEL.
+    # Example:
+    # a | 02/14/2020 | 01:16:58 | Sensor_type #0x17 |  | Asserted
+
+    # Description of argument(s):
+    #    ${sensor_type}            Type of the sensor used in hexadecimal (can be fan, temp etc.,),
+    #                              obtained from Sensor Type field in - ipmitool sdr get "sensor_name".
+    #                              Example: Sensor Type (Threshold) : Fan (0x04), here 0xHH is sensor type.
+
+    #    ${sensor_number}          Sensor number of the sensor in hexadecimal.
+    #                              obtained from Sensor ID field in - ipmitool sdr get "sensor_name".
+    #                              Example: Sensor ID : SENSOR_1 (0xHH), here 0xHH is sensor number.
+
+    ${resp}=  Run IPMI Command
+    ...  ${IPMI_RAW_CMD['SEL_entry']['Create_SEL'][0]} 0x${sensor_type} 0x${sensor_number} ${IPMI_RAW_CMD['SEL_entry']['Create_SEL'][1]}
+
+    [Return]  ${resp}
+
+
+Fetch Any Sensor From Sensor List
+    [Documentation]  Find any sensor name randomly from Sensor list.
+
+    ${resp}=  Run IPMI Standard Command  sensor
+
+    # Find total number of sensor.
+    ${data}=  Split To Lines  ${resp}
+    ${length}=  Get Length  ${data}
+
+    # Identify any one sensor.
+    ${sensor_index}=  Evaluate  random.randint(1, ${length})  modules=random
+    ${sensor_data}=  Set Variable  ${data[${sensor_index}-1]}
+    ${sensor}=  Split String  ${sensor_data}  |
+
+    # Retrieve Sensor Name and return.
+    ${sensor_name}=  Set Variable  ${sensor[0]}
+    ${sensor_name}=  Remove Whitespace  ${sensor_name}
+
+    [Return]  ${sensor_name}
+
+
+Fetch Sensor Details From SDR
+    [Documentation]  Identify the sensors from sdr get and fetch sensor details required.
+    [Arguments]  ${sensor_name}  ${setting}
+
+    # Description of argument(s):
+    #    ${sensor_number}        Sensor number of the sensor in hexadecimal.
+    #                            obtained sensor name from - 'ipmitool sensor' command.
+    #                            Example: a | 02/14/2020 | 01:16:58 | Sensor_type #0x17 |  | Asserted
+    #                            here, a is the sensor name.
+
+    #    ${setting}              Field to fetch data. Example : Sensor ID, Sensor Type (Threshold), etc,.
+
+    ${resp}=  Run IPMI Standard Command  sdr get "${sensor_name}"
+
+    ${setting_line}=  Get Lines Containing String  ${resp}  ${setting}
+    ...  case-insensitive
+    ${setting_status}=  Fetch From Right  ${setting_line}  :${SPACE}
+
+    [Return]  ${setting_status}
+
+
+Get Data And Byte From SDR Sensor
+    [Documentation]  Fetch the Field Data and hexadecimal values from given details.
+    [Arguments]  ${sensor_detail}
+
+    # Description of argument(s):
+    #    ${sensor_detail}      Requested field and the value from the sdr get ipmi command.
+    #                          Example : if Sensor ID is the requesting setting, then,
+    #                          ${sensor_detail} will be "Sensor ID : SENSOR_1 (0xHH)"
+
+    ${sensor_detail}=  Split String  ${sensor_detail}  (0x
+    ${field_data}=  Set Variable  ${sensor_detail[0]}
+    ${field_data}=  Remove Whitespace  ${field_data}
+    ${sensor_hex}=  Replace String  ${sensor_detail[1]}  )  ${EMPTY}
+    ${sensor_hex}=  Zfill Data  ${sensor_hex}  2
+
+    [Return]  ${field_data}  ${sensor_hex}
+
+
+Get Current Date from BMC
+    [Documentation]  Runs the date command from BMC and returns current date and time
+
+    # Get Current Date from BMC
+    ${date}  ${stderr}  ${rc}=  BMC Execute Command   date
+
+    # Split the string and remove first and 2nd last value from the list and join to form %d %b %H:%M:%S %Y date format
+    ${date}=  Split String  ${date}
+    Remove From List  ${date}  0
+    Remove From List  ${date}  -2
+    ${date}=  Evaluate  " ".join(${date})
+
+    # Convert the date format to %m/%d/%Y %H:%M:%S
+    ${date}=  Convert Date  ${date}  date_format=%b %d %H:%M:%S %Y  result_format=%m/%d/%Y %H:%M:%S  exclude_millis=True
+
+    [Return]   ${date}
diff --git a/lib/ipmi_utils.py b/lib/ipmi_utils.py
index a23e9e5..af5ee6d 100644
--- a/lib/ipmi_utils.py
+++ b/lib/ipmi_utils.py
@@ -715,3 +715,47 @@
     result = vf.key_value_outbuf_to_dict(ret_values, process_indent=1)
 
     return result
+
+
+def fetch_date(date):
+    r"""
+    Removes prefix 0 in a date in given date
+
+    Example : 08/12/2021 then returns 8/12/2021
+    """
+
+    date = date.lstrip("0")
+    return date
+
+
+def fetch_added_sel_date(entry):
+    r"""
+    Split sel entry string with with | and join only the date with space
+
+    Example : If entry given is, "a | 02/14/2020 | 01:16:58 | Sensor_type #0x17 |  | Asserted"
+    Then the result will be "02/14/2020 01:16:58"
+    """
+
+    temp = entry.split(" | ")
+    date = temp[1] + " " + temp[2]
+    print(date)
+    return date
+
+
+def prefix_bytes(listx):
+    r"""
+    prefixes byte strings in list
+
+    Example:
+    ${listx} = ['01', '02', '03']
+    ${listx}=  Prefix Bytes  ${listx}
+    then,
+    ${listx}= ['0x01', '0x02', '0x03']
+
+    """
+
+    listy = []
+    for item in listx:
+        item = "0x" + item
+        listy.append(item)
+    return listy
diff --git a/lib/utils.py b/lib/utils.py
index 20dbef1..40bcf83 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -411,3 +411,44 @@
 
     stdout, stderr, rc = bsu.bmc_execute_command(option_string, **bsu_options)
     return stdout
+
+
+def split_string_with_index(stri, n):
+    r"""
+    To split every n characters and forms an element for every nth index
+
+    Example : Given ${stri} = "abcdef", then the function call,
+    ${data}=  Split List With Index  ${stri}  2
+    then, result will be data = ['ab', 'cd', 'ef']
+    """
+
+    n = int(n)
+    data = [stri[index: index + n] for index in range(0, len(stri), n)]
+    return data
+
+
+def remove_whitespace(instring):
+    r"""
+    Removes the white spaces around the string
+
+    Example: instring = "  xxx  ", then returns instring = "xxx"
+    """
+
+    return instring.strip()
+
+
+def zfill_data(data, num):
+    r"""
+    zfill() method adds zeros (0) at the beginning of the string, until it reaches the specified length.
+
+    Usage : ${anystr}=  Zfill Data  ${data}  num
+
+    Example : Binary of one Byte has 8 bits - xxxx xxxx
+
+    Consider ${binary} has only 3 bits after converting from Hexadecimal/decimal to Binary
+    Say ${binary} = 110 then,
+    ${binary}=  Zfill Data  ${binary}  8
+    Now ${binary} will be 0000 0110
+    """
+
+    return data.zfill(int(num))
