aboutsummaryrefslogtreecommitdiffstats
path: root/config/apcupsd
diff options
context:
space:
mode:
Diffstat (limited to 'config/apcupsd')
-rw-r--r--config/apcupsd/apcupsd.conf.php1
-rw-r--r--config/apcupsd/apcupsd.inc34
-rw-r--r--config/apcupsd/apcupsd.xml22
-rwxr-xr-xconfig/apcupsd/apcupsd_mail.php95
4 files changed, 143 insertions, 9 deletions
diff --git a/config/apcupsd/apcupsd.conf.php b/config/apcupsd/apcupsd.conf.php
index 6a19b915..7a0340cd 100644
--- a/config/apcupsd/apcupsd.conf.php
+++ b/config/apcupsd/apcupsd.conf.php
@@ -109,6 +109,7 @@ UPSCABLE {$upscable}
# default of 3052 will be used.
#
UPSTYPE {$upstype}
+{$device}
# POLLTIME <int>
# Interval (in seconds) at which apcupsd polls the UPS for status. This
diff --git a/config/apcupsd/apcupsd.inc b/config/apcupsd/apcupsd.inc
index 9abc23ba..a2b8d2ff 100644
--- a/config/apcupsd/apcupsd.inc
+++ b/config/apcupsd/apcupsd.inc
@@ -39,6 +39,7 @@ require_once("globals.inc");
function php_install_apcupsd(){
sync_package_apcupsd();
+ apccontrol_scripts_install();
}
function php_deinstall_apcupsd(){
@@ -138,6 +139,7 @@ function sync_package_apcupsd(){
$upsname=$apcupsd_config['upsname'];
$upscable=$apcupsd_config['upscable'];
$upstype=$apcupsd_config['upstype'];
+ $device=($apcupsd_config['device'] != ''? "DEVICE {$apcupsd_config['device']}" : "#DEVICE");
$polltime=($apcupsd_config['polltime'] != ''? $apcupsd_config['polltime'] : "60");
$onbatterydelay=($apcupsd_config['onbatterydelay'] != ''? $apcupsd_config['onbatterydelay'] : "6");
$batterylevel=($apcupsd_config['batterylevel'] != ''? $apcupsd_config['batterylevel'] : "5");
@@ -185,7 +187,37 @@ function sync_package_apcupsd(){
unlink($apcupsd_rcfile);
}
}
-
+
conf_mount_ro();
}
+
+function apccontrol_scripts_install(){
+
+ // check pfsense version
+ $pfs_version = substr(trim(file_get_contents("/etc/version")),0,3);
+ if ($pfs_version > 2.0){
+ define('APCUPSD_BASE', '/usr/pbi/apcupsd-' . php_uname("m"));
+ }
+ else {
+ define('APCUPSD_BASE', '/usr/local');
+ }
+
+ $apccontrol_scripts = array("offbattery","onbattery","commfailure","commok","changeme");
+ foreach($apccontrol_scripts as $apccontrol_script) {
+
+ $apccontrol_script_file=<<<EOF
+#!/bin/sh
+
+/usr/local/bin/php -f /usr/local/pkg/apcupsd_mail.php {$apccontrol_script} > /dev/null
+
+exit 0
+
+EOF;
+
+ file_put_contents(APCUPSD_BASE . "/etc/apcupsd/" . $apccontrol_script, $apccontrol_script_file, LOCK_EX);
+ }
+
+}
+
?>
+
diff --git a/config/apcupsd/apcupsd.xml b/config/apcupsd/apcupsd.xml
index 8674af61..85148b2b 100644
--- a/config/apcupsd/apcupsd.xml
+++ b/config/apcupsd/apcupsd.xml
@@ -40,7 +40,7 @@
<name>Apcupsd</name>
<title>Services: Apcupsd (General)</title>
<category>Monitoring</category>
- <version>0.1</version>
+ <version>0.2</version>
<include_file>/usr/local/pkg/apcupsd.inc</include_file>
<addedit_string>Apcupsd has been created/modified.</addedit_string>
<delete_string>Apcupsd has been deleted.</delete_string>
@@ -60,6 +60,11 @@
<prefix>/usr/local/pkg/</prefix>
<chmod>0755</chmod>
</additional_files_needed>
+ <additional_files_needed>
+ <item>http://www.pfsense.org/packages/config/apcupsd/apcupsd_mail.php</item>
+ <prefix>/usr/local/pkg/</prefix>
+ <chmod>0755</chmod>
+ </additional_files_needed>
<menu>
<name>Apcupsd</name>
<tooltiptext>Setup Apcupsd specific settings</tooltiptext>
@@ -152,12 +157,6 @@ UPSTYPE DEVICE Description <br>
catching; you usually want "APC". Port is usually
161. Community is usually "private".<br>
<br>
-<strong>netsnmp hostname:port:vendor:community</strong>
- OBSOLETE
- Same as SNMP above but requires use of the
- net-snmp library. Unless you have a specific need
- for this old driver, you should use 'snmp' instead.<br>
-<br>
<strong>dumb /dev/tty**</strong> Old serial character device for use with
simple-signaling UPSes.<br>
<br>
@@ -178,6 +177,13 @@ UPSTYPE DEVICE Description <br>
<required>true</required>
</field>
<field>
+ <fielddescr>Device</fielddescr>
+ <fieldname>device</fieldname>
+ <description></description>
+ <type>input</type>
+ <size>60</size>
+ </field>
+ <field>
<fielddescr>Poll Time</fielddescr>
<fieldname>polltime</fieldname>
<description>Interval (in seconds) at which apcupsd polls the UPS for status. Default is 60</description>
@@ -322,7 +328,7 @@ UPSTYPE DEVICE Description <br>
</options>
</field>
</fields>
- <custom_php_install_command>sync_package_apcupsd();</custom_php_install_command>
+ <custom_php_install_command>php_install_apcupsd();</custom_php_install_command>
<custom_php_command_before_form></custom_php_command_before_form>
<custom_php_after_head_command></custom_php_after_head_command>
<custom_php_after_form_command></custom_php_after_form_command>
diff --git a/config/apcupsd/apcupsd_mail.php b/config/apcupsd/apcupsd_mail.php
new file mode 100755
index 00000000..c9462aac
--- /dev/null
+++ b/config/apcupsd/apcupsd_mail.php
@@ -0,0 +1,95 @@
+<?php
+/*
+ apcupsd_mail.php
+ part of pfSense (http://www.pfsense.com/)
+ Copyright (C) 2014 Danilo G. Baio <dbaio@bsd.com.br>
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require_once("pkg-utils.inc");
+require_once("globals.inc");
+require_once("phpmailer/class.phpmailer.php");
+
+global $config, $g;
+
+$apcstatus[killpower] = "UPS now committed to shut down";
+$apcstatus[commfailure] = "Communications with UPS lost";
+$apcstatus[commok] = "Communications with UPS restored";
+$apcstatus[onbattery] = "Power failure. Running on UPS batteries";
+$apcstatus[offbattery] = "Power has returned...";
+$apcstatus[failing] = "UPS battery power exhausted. Doing shutdown";
+$apcstatus[timeout] = "UPS battery runtime limit exceeded. Doing shutdown";
+$apcstatus[loadlimit] = "UPS battery discharge limit reached. Doing shutdown";
+$apcstatus[runlimit] = "UPS battery runtime percent reached. Doing shutdown";
+$apcstatus[doreboot] = "Beginning Reboot Sequence";
+$apcstatus[doshutdown] = "Beginning Shutdown Sequence";
+$apcstatus[annoyme] = "Power problems please logoff";
+$apcstatus[emergency] = "Emergency Shutdown. Possible UPS battery failure";
+$apcstatus[changeme] = "Emergency! UPS batteries have failed. Change them NOW";
+$apcstatus[remotedown] = "Remote Shutdown. Beginning Shutdown Sequence";
+
+if (empty($argv[1]) || empty($apcstatus["$argv[1]"]))
+ return;
+
+$apcsubject = $apcstatus["$argv[1]"];
+
+if (empty($config['notifications']['smtp']['ipaddress']))
+ return;
+
+$mail = new PHPMailer();
+$mail->IsSMTP();
+$mail->Host = $config['notifications']['smtp']['ipaddress'];
+
+if ($config['notifications']['smtp']['ssl'] == "checked")
+ $mail->SMTPSecure = "ssl";
+
+$mail->Port = empty($config['notifications']['smtp']['port']) ? 25 : $config['notifications']['smtp']['port'];
+
+if($config['notifications']['smtp']['username'] &&
+ $config['notifications']['smtp']['password']) {
+ $mail->SMTPAuth = true;
+ $mail->Username = $config['notifications']['smtp']['username'];
+ $mail->Password = $config['notifications']['smtp']['password'];
+}
+
+$mail->ContentType = 'text/html';
+$mail->IsHTML(true);
+$mail->AddReplyTo($config['notifications']['smtp']['fromaddress'], "Apcupsd");
+$mail->SetFrom($config['notifications']['smtp']['fromaddress'], "Apcupsd");
+$address = $config['notifications']['smtp']['notifyemailaddress'];
+$mail->AddAddress($address, "Apcupsd Recipient");
+$mail->Subject = "{$config['system']['hostname']}.{$config['system']['domain']} - {$apcsubject}";
+
+putenv("PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin");
+$mail->Body = "<pre>";
+$ph = popen('apcaccess status 2>&1', "r" );
+while ($line = fgets($ph)) $mail->Body .= htmlspecialchars($line);
+pclose($ph);
+$mail->Body .= "</pre>";
+
+if(!$mail->Send()) {
+ echo "Mailer Error: " . $mail->ErrorInfo;
+}
+
+?>