diff --git a/roles/float-base/files/node-exporter-freeipmi.awk b/roles/float-base/files/node-exporter-freeipmi.awk
new file mode 100644
index 0000000000000000000000000000000000000000..a35e396567cf94908bd91262efc5ae6c73956dec
--- /dev/null
+++ b/roles/float-base/files/node-exporter-freeipmi.awk
@@ -0,0 +1,87 @@
+#!/bin/awk -f
+
+function export(values, name) {
+  if (values["metric_count"] < 1) {
+    return
+  }
+  delete values["metric_count"]
+
+  printf("# HELP %s%s %s sensor reading from freeipmi\n", namespace, name, help[name]);
+  printf("# TYPE %s%s gauge\n", namespace, name);
+  for (sensor in values) {
+    printf("%s%s{sensor=\"%s\"} %f\n", namespace, name, sensor, values[sensor]);
+  }
+}
+
+# Fields are Bar separated, with space padding.
+BEGIN {
+  FS = "[ ]*[|][ ]*";
+  namespace = "node_ipmi_";
+
+  # Friendly description of the type of sensor for HELP.
+  help["temperature_celsius"] = "Temperature";
+  help["volts"] = "Voltage";
+  help["amperes"] = "Current";
+  help["power_watts"] = "Power";
+  help["speed_rpm"] = "Fan";
+  help["status"] = "Chassis status";
+
+  temperature_celsius["metric_count"] = 0;
+  volts["metric_count"] = 0;
+  amperes["metric_count"] = 0;
+  power_watts["metric_count"] = 0;
+  speed_rpm["metric_count"] = 0;
+  status["metric_count"] = 0;
+}
+
+# Not a valid line.
+{
+  if (NF < 3) {
+    next
+  }
+}
+
+# $4 is value field.
+$4 ~ /N\/A/ {
+  next
+}
+
+# $5 is units field.
+$5 ~ /C/ {
+  temperature_celsius[$2] = $4;
+  temperature_celsius["metric_count"]++;
+}
+
+$5 ~ /V/ {
+  volts[$2] = $4;
+  volts["metric_count"]++;
+}
+
+$5 ~ /A/ {
+  amperes[$2] = $4;
+  amperes["metric_count"]++;
+}
+
+$5 ~ /W/ {
+  power_watts[$2] = $4;
+  power_watts["metric_count"]++;
+}
+
+$5 ~ /RPM/ {
+  speed_rpm[$2] = $4;
+  speed_rpm["metric_count"]++;
+}
+
+$2 ~ /Chassis/ {
+  status[$2] = sprintf("%d", substr($4,3,2));
+  status["metric_count"]++;
+}
+
+END {
+  export(temperature_celsius, "temperature_celsius");
+  export(volts, "volts");
+  export(amperes, "amperes");
+  export(power_watts, "power_watts");
+  export(speed_rpm, "speed_rpm");
+  export(status, "status");
+}
diff --git a/roles/float-base/files/node-exporter-scripts/freeipmi.sh b/roles/float-base/files/node-exporter-scripts/freeipmi.sh
new file mode 100644
index 0000000000000000000000000000000000000000..2ad1f818038b591957574682a0b710f379486e25
--- /dev/null
+++ b/roles/float-base/files/node-exporter-scripts/freeipmi.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+ipmi-sensors | awk -f /usr/lib/float/node-exporter-freeipmi.awk
diff --git a/roles/float-base/tasks/ipmi.yml b/roles/float-base/tasks/ipmi.yml
index 6367e07081a93d6f982c3206db6c189fdea2282f..c530db246be87429ba45f52c50ca99af2219c5c8 100644
--- a/roles/float-base/tasks/ipmi.yml
+++ b/roles/float-base/tasks/ipmi.yml
@@ -1,15 +1,25 @@
 ---
-- name: Install ipmitool packages and dependency
+- name: Install freeipmi packages and dependency
   apt:
     name: "{{ packages }}"
     state: present
   vars:
     packages:
-      - ipmitool
-      - gawk # prometheus-node-exporter-ipmitool-sensor dependency
+      - freeipmi-tools
+      - gawk # node-exporter-freeipmi.awk dependency
 
-- name: Enable prometheus node-exporter ipmitool sensor
+- name: Remove ipmitool, not used anymore
+  apt:
+    name: ipmitool
+    state: absent
+
+- name: Disable prometheus node-exporter ipmitool sensor
   systemd:
     name: prometheus-node-exporter-ipmitool-sensor.timer
-    state: started
-    enabled: yes
+    state: stopped
+    enabled: no
+
+- name: Install freeipmi node-exporter script
+  copy:
+    src: "node-exporter-freeipmi.awk"
+    dest: "/usr/lib/float/node-exporter-freeipmi.awk"