diff --git a/html/includes/graphs/device/charge.inc.php b/html/includes/graphs/device/charge.inc.php
new file mode 100644
index 0000000000..237803fa82
--- /dev/null
+++ b/html/includes/graphs/device/charge.inc.php
@@ -0,0 +1,9 @@
+
diff --git a/html/includes/graphs/sensor/charge.inc.php b/html/includes/graphs/sensor/charge.inc.php
new file mode 100644
index 0000000000..153d435dd3
--- /dev/null
+++ b/html/includes/graphs/sensor/charge.inc.php
@@ -0,0 +1,29 @@
+
diff --git a/html/pages/device/health.inc.php b/html/pages/device/health.inc.php
index c204c51e4d..eab0ca1ea2 100644
--- a/html/pages/device/health.inc.php
+++ b/html/pages/device/health.inc.php
@@ -5,6 +5,7 @@ $diskio = dbFetchCell("select count(*) from ucd_diskio WHERE device_id = ?
$mempools = dbFetchCell("select count(*) from mempools WHERE device_id = ?", array($device['device_id']));
$processor = dbFetchCell("select count(*) from processors WHERE device_id = ?", array($device['device_id']));
+$charge = dbFetchCell("select count(*) from sensors WHERE sensor_class='charge' AND device_id = ?", array($device['device_id']));
$temperatures = dbFetchCell("select count(*) from sensors WHERE sensor_class='temperature' AND device_id = ?", array($device['device_id']));
$humidity = dbFetchCell("select count(*) from sensors WHERE sensor_class='humidity' AND device_id = ?", array($device['device_id']));
$fans = dbFetchCell("select count(*) from sensors WHERE sensor_class='fanspeed' AND device_id = ?", array($device['device_id']));
@@ -20,6 +21,7 @@ if ($processor) { $datas[] = 'processor'; }
if ($mempools) { $datas[] = 'mempool'; }
if ($storage) { $datas[] = 'storage'; }
if ($diskio) { $datas[] = 'diskio'; }
+if ($charge) { $datas[] = 'charge'; }
if ($temperatures) { $datas[] = 'temperature'; }
if ($humidity) { $datas[] = 'humidity'; }
if ($fans) { $datas[] = 'fanspeed'; }
@@ -30,6 +32,7 @@ if ($power) { $datas[] = 'power'; }
if ($dBm) { $datas[] = 'dbm'; }
$type_text['overview'] = "Overview";
+$type_text['charge'] = "Battery Charge";
$type_text['temperature'] = "Temperature";
$type_text['humidity'] = "Humidity";
$type_text['mempool'] = "Memory";
diff --git a/html/pages/device/health/charge.inc.php b/html/pages/device/health/charge.inc.php
new file mode 100644
index 0000000000..7282247bff
--- /dev/null
+++ b/html/pages/device/health/charge.inc.php
@@ -0,0 +1,9 @@
+
diff --git a/html/pages/device/overview.inc.php b/html/pages/device/overview.inc.php
index 214367f940..0cf9ea0454 100644
--- a/html/pages/device/overview.inc.php
+++ b/html/pages/device/overview.inc.php
@@ -39,6 +39,7 @@ include("overview/storage.inc.php");
if(is_array($entity_state['group']['c6kxbar'])) { include("overview/c6kxbar.inc.php"); }
include("overview/toner.inc.php");
+include("overview/sensors/charge.inc.php");
include("overview/sensors/temperatures.inc.php");
include("overview/sensors/humidity.inc.php");
include("overview/sensors/fanspeeds.inc.php");
diff --git a/html/pages/device/overview/sensors/charge.inc.php b/html/pages/device/overview/sensors/charge.inc.php
new file mode 100644
index 0000000000..bf40977499
--- /dev/null
+++ b/html/pages/device/overview/sensors/charge.inc.php
@@ -0,0 +1,10 @@
+
diff --git a/html/pages/health.inc.php b/html/pages/health.inc.php
index cd4663a674..50e1c1b585 100644
--- a/html/pages/health.inc.php
+++ b/html/pages/health.inc.php
@@ -2,6 +2,7 @@
$datas = array('mempool','processor','storage');
if ($used_sensors['temperature']) $datas[] = 'temperature';
+if ($used_sensors['charge']) $datas[] = 'charge';
if ($used_sensors['humidity']) $datas[] = 'humidity';
if ($used_sensors['fanspeed']) $datas[] = 'fanspeed';
if ($used_sensors['voltage']) $datas[] = 'voltage';
@@ -13,6 +14,7 @@ if ($used_sensors['dBm']) $datas[] = 'dBm';
// FIXME generalize -> static-config ?
$type_text['overview'] = "Overview";
$type_text['temperature'] = "Temperature";
+$type_text['charge'] = "Battery Charge";
$type_text['humidity'] = "Humidity";
$type_text['mempool'] = "Memory";
$type_text['storage'] = "Disk Usage";
diff --git a/html/pages/health/charge.inc.php b/html/pages/health/charge.inc.php
new file mode 100644
index 0000000000..867b50f9e8
--- /dev/null
+++ b/html/pages/health/charge.inc.php
@@ -0,0 +1,9 @@
+
diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php
index b2b3867883..c05677ffb1 100644
--- a/includes/defaults.inc.php
+++ b/includes/defaults.inc.php
@@ -563,6 +563,7 @@ $config['discovery_modules']['libvirt-vminfo'] = 1;
$config['discovery_modules']['toner'] = 1;
$config['discovery_modules']['ucd-diskio'] = 1;
$config['discovery_modules']['services'] = 1;
+$config['discovery_modules']['charge'] = 1;
$config['modules_compat']['rfc1628']['liebert'] = 1;
$config['modules_compat']['rfc1628']['netmanplus'] = 1;
diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php
index 4e279358de..bb202a28ea 100644
--- a/includes/definitions.inc.php
+++ b/includes/definitions.inc.php
@@ -1102,6 +1102,9 @@ $config['graph_types']['device']['storage']['descr'] = 'Filesystem Usage';
$config['graph_types']['device']['temperature']['section'] = 'system';
$config['graph_types']['device']['temperature']['order'] = '0';
$config['graph_types']['device']['temperature']['descr'] = 'temperature';
+$config['graph_types']['device']['charge']['section'] = 'system';
+$config['graph_types']['device']['charge']['order'] = '0';
+$config['graph_types']['device']['charge']['descr'] = 'Battery Charge';
$config['graph_types']['device']['ucd_cpu']['section'] = 'system';
$config['graph_types']['device']['ucd_cpu']['order'] = '0';
$config['graph_types']['device']['ucd_cpu']['descr'] = 'Detailed Processor Usage';
diff --git a/includes/discovery/charge.inc.php b/includes/discovery/charge.inc.php
new file mode 100755
index 0000000000..cd51da188d
--- /dev/null
+++ b/includes/discovery/charge.inc.php
@@ -0,0 +1,16 @@
+
diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php
new file mode 100644
index 0000000000..85e7443d7c
--- /dev/null
+++ b/includes/discovery/charge/apc.inc.php
@@ -0,0 +1,29 @@
+
diff --git a/includes/discovery/sensors.inc.php b/includes/discovery/sensors.inc.php
index e2cd160b87..dcde6cb062 100644
--- a/includes/discovery/sensors.inc.php
+++ b/includes/discovery/sensors.inc.php
@@ -17,5 +17,6 @@ include("includes/discovery/frequencies.inc.php");
include("includes/discovery/current.inc.php");
include("includes/discovery/power.inc.php");
include("includes/discovery/fanspeeds.inc.php");
+include("includes/discovery/charge.inc.php");
?>
diff --git a/includes/polling/sensors.inc.php b/includes/polling/sensors.inc.php
index 0fc8a5ae84..0979f8c3f3 100644
--- a/includes/polling/sensors.inc.php
+++ b/includes/polling/sensors.inc.php
@@ -20,7 +20,8 @@ $supported_sensors = array('current' => 'A',
'power' => 'W',
'voltage' => 'V',
'temperature' => 'C',
- 'dbm' => 'dBm');
+ 'dbm' => 'dBm',
+ 'charge' => '%');
foreach ($supported_sensors as $sensor_type => $sensor_unit)
{