The following wrapper script works fine for the apcaccess program to cause it to spit out XML.  This could easily be adapted to a command line NUT program that queries values from a UPS.

This script wraps the output of apcaccess into XML.  NOTE: this script output is NOT completely usable for input into a database or other management logging because many of the parameter values from apcaccess include measurement units in them, for example instead of voltage being "120" the voltage is "120 Volts"

This is intended to be run as a CGI script so that there will not be any needed security auditing of the apcaccess program (since that program is not running as a daemon or otherwise directly exposed to the webserver)


Setup the webserver to serve the script output.  For Apache, use the following in it's config file:

ScriptAlias /apcupsd-xml/ "/usr/local/www/apache22/apcupsd-xml/"

<Directory "/usr/local/www/apache22/apcupsd-xml">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

You may want to restrict this to specific subnets. Hit the webserver with a browser using this URL (for
example the webserver is foo.example.com the script is named status.sh

http://foo.example.com/apcupsd-xml/status.sh

should give you the following XML:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<apcaccess_dump>
   <parameter name="APC">
                <value>001,054,1280</value>
   </parameter>
   <parameter name="DATE">
                <value>2016-01-18 21:00:10 -0800</value>
   </parameter>
   <parameter name="HOSTNAME">
                <value>foo.example.com</value>
   </parameter>
   <parameter name="VERSION">
                <value>3.14.12 (29 March 2014) freebsd</value>
   </parameter>

Here is the script:

#!/bin/sh
/usr/local/sbin/apcaccess > /tmp/apcaccess.list
echo "Content-type: text/plain; charset=iso-8859-1"
echo
header='<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<apcaccess_dump>'

fmt='   <parameter name="%s">
                <value>%s</value>
   </parameter>
'
footer='</apcaccess_dump>'

{
printf "%s\n" "$header"
while read ParameterName Colon ValueName
do
        printf "$fmt" "$ParameterName" "$ValueName"
done < "/tmp/apcaccess.list"
printf "%s\n" "$footer"
}
/bin/rm /tmp/apcaccess.list
$

Ted

On 12/30/2021 8:26 AM, Roger Price wrote:
On Thu, 30 Dec 2021, Greg Troxel wrote:

I have received a comment asking me to add XML encoded responses from
the server as an option.

Do you mean

 there is already XML and you are going to document it

or

 there is not XML, and someone is asking to draft a description of what XML  might be for the document, in the hopes that somebody in some NUT-compliant
 implementation will implmenent it?

The proposal is to create and document a simple XML encoding for the responses from the Attachment Daemon, to facilitate the use of mobile Management Daemons (clients on iPhone, Android, ...)

As I grep the sources to 2.7.4 (yes I know that's old, but it's the most recent release, and what is handy in pkgsrc), I see a driver that talks XML to Eaton units, but I don't see a user-to-nut XML interface.

XML encoding of responses would be completely new.

The comment proposed REST.  Is this the best choice?  Would SOAP be better in an RFC?

Posing that question makes it clear to me that the XML situation is not baked enough to put in an RFC, and I think it's much better to document what's already established, and then after the XML has settled down, create a revision that includes XML also, along with any other fixes.

That's a likely path for a future RFC. A second text (which following the IETF process, would have a new number) which corrects and extends the first and which is carried along a standards track.  But in the meantime is there a volunteer to write text and demonstration code for the current I-D?

Roger

_______________________________________________
Nut-upsdev mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsdev

_______________________________________________
Nut-upsdev mailing list
[email protected]
https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/nut-upsdev

Reply via email to