diff --git a/openbmc-sensors b/openbmc-sensors
new file mode 100755
index 0000000..c54dc97
--- /dev/null
+++ b/openbmc-sensors
@@ -0,0 +1,75 @@
+#!/bin/env python
+
+import argparse
+import requests
+import json
+
+import urllib3
+urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
+
+
+class BMC:
+    def __init__(self, server):
+        self.url = "https://{0}/".format(server)
+        self.session = requests.Session()
+        self.login()
+
+    def login(self):
+        r = self.session.post(self.url + 'login',
+                              json={'data': ['root', '0penBmc']},
+                              verify=False)
+        j = r.json()
+        if j['status'] != 'ok':
+            raise Exception("Failed to login: \n" + r.text)
+
+    def list_all(self):
+        r = self.session.get(self.url + 'xyz/openbmc_project/sensors/enumerate',
+                             verify=False)
+        j = r.json()
+        if j['status'] != 'ok':
+            raise Exception("Failed to query sensors: \n" + r.text)
+
+        sensors = j['data']
+        #sensors.sort(key=lambda x: int(x.split("/")[-1]))
+
+        return sensors
+
+    def get_sensor(self, sensor):
+        r = self.session.get(self.url + sensor, verify=False)
+
+        j = r.json()
+        if j['status'] != 'ok':
+            raise Exception("Failed to get sensor " + sensor + ": \n" + r.text)
+
+        return j['data']      
+
+def do_list_all(args):
+    s = BMC(server=args.server)
+    for e in s.list_all():
+        print(e)
+
+def do_view_sensor(args):
+    s = BMC(server=args.server)
+    print(s.get_sensor(args.sensor))
+    print json.dumps(s.get_sensor(args.sensor), indent=4)
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--server', help='hostname or IP of BMC', type=str,
+                    required=True)
+
+subparsers = parser.add_subparsers()
+
+list_all_sensors = subparsers.add_parser('list', help='List all sensors on BMC')
+list_all_sensors.set_defaults(func=do_list_all)
+
+view_sensor = subparsers.add_parser(
+    'view', help='View all data for an individual sensor')
+view_sensor.add_argument('sensor', help='The sensor to view')
+view_sensor.set_defaults(func=do_view_sensor)
+
+args = parser.parse_args()
+
+if 'func' in args:
+    args.func(args)
+else:
+    parser.print_help()
