powerguru-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Powerguru-commit] [SCM] powerguru branch, master, updated. d926d2a7c5b5


From: Rob Savoye
Subject: [Powerguru-commit] [SCM] powerguru branch, master, updated. d926d2a7c5b5cc7fd089bedfdf8257e9b23a5fde
Date: Thu, 11 Apr 2019 11:39:35 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "powerguru".

The branch, master has been updated
       via  d926d2a7c5b5cc7fd089bedfdf8257e9b23a5fde (commit)
       via  e443086acc616dd67c88bcc9ee0445f1e31b2010 (commit)
       via  aee559762fd7ba45d084150d8f1ac915b422b7b3 (commit)
       via  8e1b4b70fee1f568037a2ad948d83da4e40e86c5 (commit)
       via  74fe0327b70884bc90ed20c21ab4caa30fb803e6 (commit)
       via  12fb3deac7026733cc0457e8b5ea03249ba82022 (commit)
      from  ee9306cf9c06489bb20aed3fa8407bf61122b9a4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=d926d2a7c5b5cc7fd089bedfdf8257e9b23a5fde


commit d926d2a7c5b5cc7fd089bedfdf8257e9b23a5fde
Author: Rob Savoye <address@hidden>
Date:   Thu Apr 11 09:39:20 2019 -0600

    Update copyright block to be consistent. Add more doxygen tags

diff --git a/Makefile.am b/Makefile.am
index e89b7ad..a810ad3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -131,6 +131,9 @@ if BUILD_CROSS
        @echo " Libc.so is from here: `${CXX} -print-file-name=libc.so`"
 endif
 
-clean:
-       @-$(RM) -fr powerguru_* pypowerguru_* \
-               powerguru-*dev powerguru*.bz2 *.sum *.log
+CLEANFILES = powerguru_* pypowerguru_* \
+       powerguru-*dev powerguru*.bz2 *.sum *.log
+
+# makefile for etags, used by emacs and vi
+tags:
+       etags `find -name \*.py -o -name \*.cc -o -name \*.h`
diff --git a/README b/README
index 8a5f6ae..521ea8b 100644
--- a/README
+++ b/README
@@ -15,8 +15,8 @@ protocols.
 like the Rapberry PI or Aurdino, and many inexpensive GPIO, i2C, or
 USB sensors have changed everything.
 
-  If you've never done it, refactoring an od project is interesting. I
-hope I writ better C++ code now. In the years since this code was left
+  If you've never done it, refactoring an old project is interesting. I
+hope I write better C++ code now. In the years since this code was left
 to bit-rot, there are new C++ standards, better libraries, and
 different protocols. For one thing, the Boost libraries are awesome,
 and allowed me to drop lots of old crufty C++ wrappers around a C
@@ -44,3 +44,8 @@ Python version that does the same things. While developing 
Python on a
 Raspberry PI is pretty easy, most large IOT appliction are written in
 C++, and learning how to cross compile and remote debug is an
 important skill set to know.
+
+There's a few helper python scripts:
+mergedb.py - Merge data logged to a remote postgresql database to a
+          local one 
+chart.py - Crudely plot the data. (work in progress)
diff --git a/client/cmd.cc b/client/cmd.cc
index ff5dd6d..5457c25 100644
--- a/client/cmd.cc
+++ b/client/cmd.cc
@@ -17,6 +17,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file cmd.cc Main client program that talks to the pgd daemon.
+
 // This is generated by autoconf
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -54,7 +57,7 @@ main(int argc, char *argv[])
     int         c;
     std::string dbhost = "localhost";
     std::string pserver = "pi";
-    boost::system::error_code ret;
+    //boost::system::error_code ret;
 
     log_init("pguru");
     // scan for the two main standard GNU options
diff --git a/client/threads.cc b/client/threads.cc
index 3bdae5e..1ee8f10 100644
--- a/client/threads.cc
+++ b/client/threads.cc
@@ -15,6 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file threads.cc Threaded event handlers for all client side I/O 
+
 #ifdef HAVE_CONFIG_H
 // This is generated by autoconf.
 # include "config.h"
diff --git a/configure.ac b/configure.ac
index 1b0bd98..0b8af3d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,6 +76,11 @@ else
    AC_DOCBOOK_STYLES
 fi
 
+# Debian/Ubuntu
+# STYLESDIR = /usr/share/xml/docbook/stylesheet/docbook-xsl
+# Fedora
+# STYLESDIR = /usr/share/sgml/docbook/xsl-stylesheets-1.79.2
+
 optional=""
 missing=""
 devices=""
diff --git a/daemon/main.cc b/daemon/main.cc
index 1f9dc56..3ce40ea 100644
--- a/daemon/main.cc
+++ b/daemon/main.cc
@@ -16,6 +16,10 @@
 // You should have received a copy of the GNU General Public License
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+
+/// \copyright GNU Public License.
+/// \file main.cc Main loop for the daemon.
 
 #ifdef HAVE_CONFIG_H
 // This is generated by autoconf.
@@ -56,11 +60,11 @@ include "xantrex-trace.h"
 #include "ownet.h"
 #endif
 #include "menuitem.h"
-#include "console.h"
 #include "database.h"
-#include "snmp.h"
+#ifdef HAVE_SNMP
+# include "snmp.h"
+#endif
 #include "rc.h"
-#include "serial.h"
 #include "commands.h"
 #include "onewire.h"
 using namespace boost::asio;
@@ -84,6 +88,7 @@ std::condition_variable queue_cond;
 
 // Note that an entry for 'pi' needs to be in /etc/hosts.
 const char DEFAULT_ARGV[] = "-s pi:4304";
+const char *DEFAULT_UART = "/dev/ttyS0";
 
 #include <boost/system/error_code.hpp>
 using namespace boost::system;
@@ -94,15 +99,14 @@ main(int argc, char *argv[])
     int c, i;
     std::string item, str;
     const char *filespec;
-    std::string hostname;
-    std::string owserver;
+    std::string hostname = "lccalhost";
+    std::string owserver = "localhost";
     bool snmp;
     bool daemon;
     bool client;
-    boost::system::error_code   ret;
     std::condition_variable alldone;
 
-    log_init("/tmp/pgd");
+    log_init("pgd");
     
     // scan for the two main standard GNU options
     for (c = 0; c < argc; c++) {
@@ -123,18 +127,18 @@ main(int argc, char *argv[])
     snmp = false;
     // Load the database config variable so they can be overridden by
     // the command line arguments.
-    RCinitFile config;
-    config.load_files();
-    if (config.deviceGet().size() > 0) {    
-        filespec = (char *)config.deviceGet().c_str();
-    }
+    //RCinitFile config;
+    //config.load_files();
+    //if (config.deviceGet().size() > 0) {
+    //    filespec = (char *)config.deviceGet().c_str();
+    //}
     
     filespec = DEFAULT_UART;
     // Process the command line arguments.
     while ((c = getopt (argc, argv, "d:ahvw:s:")) != -1) {
         switch (c) {
           case 'd':
-              filespec = strdup(optarg);
+              filespec = optarg;
               break;
 
           case 'h':
@@ -143,7 +147,7 @@ main(int argc, char *argv[])
           case 'w':
               // this string needs to include the port if it's
               // not using the default one.
-              owserver = strdup(optarg);
+              owserver = optarg;
               break;
 
 #ifdef USE_SNMP
@@ -151,17 +155,10 @@ main(int argc, char *argv[])
               snmp = true;
               break;
 #endif
-              // Specify database host machine.
-#if defined(HAVE_MARIADB) && defined(HAVE_POSTGRESQL)
-          case 'm':
-              pdb.dbHostSet(optarg);
-              break;
-              // Specify database name.
-#endif
           case 'v':
               // verbosity++;
               //dbglogfile.set_verbosity();
-              BOOST_LOG(lg) << "FIXME: Verbose output NOT turned on";
+              // BOOST_LOG(lg) << "FIXME: Verbose output NOT turned on";
               break;
        
           default:
@@ -177,13 +174,14 @@ main(int argc, char *argv[])
         agent.master(false);
     }
 #endif
+
     io_service ioservice;
-    tcp::endpoint tcp_endpoint{tcp::v4(), 7654};
-    tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint};
+//    tcp::endpoint tcp_endpoint{tcp::v4(), 7654};
+//    tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint};
     tcp::socket tcp_socket{ioservice};
-    std::string data;
-    tcp::resolver resolv{ioservice};
-    std::array<char, 4096> bytes;
+//    std::string data;
+//    tcp::resolver resolv{ioservice};
+//    std::array<char, 4096> bytes;
     std::thread client_thread (client_handler, std::ref(tcp_socket));
 
     Onewire ow;
@@ -270,8 +268,6 @@ usage (const char *prog)
     // Display the Database options
     std::cerr << "Database Options:" << std::endl;
     std::cerr << "\t-m hostname\t\t\tSpecify Database hostname or IP" << 
std::endl;
-
-    exit (-1);
 }
 
 // local Variables:
diff --git a/daemon/threads.cc b/daemon/threads.cc
index a04e61b..6ee893f 100644
--- a/daemon/threads.cc
+++ b/daemon/threads.cc
@@ -15,6 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file threads.cc Threaded event handlers for all server side I/O 
+
 #ifdef HAVE_CONFIG_H
 // This is generated by autoconf.
 # include "config.h"
@@ -105,7 +108,7 @@ onewire_handler(Onewire &onewire)
                 }
                 if (temp) {
                     pdb.formatQuery(temp, query);
-                    pdb.queryInsert(query, "temperature");
+                    pdb.queryInsert(query, "weather");
                     continue;
                 }
             }
diff --git a/devices/Makefile.am b/devices/Makefile.am
index 7f61ae3..920e0b1 100644
--- a/devices/Makefile.am
+++ b/devices/Makefile.am
@@ -1,5 +1,7 @@
 #
-# Copyright (C) 2018, 2019 Free Software Foundation, Inc.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+#               2014, 2015, 2016, 2017, 2018, 2019
+#    Free Software Foundation, Inc.
 # 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
diff --git a/devices/onewire.cc b/devices/onewire.cc
index 41daaa1..897e978 100644
--- a/devices/onewire.cc
+++ b/devices/onewire.cc
@@ -15,6 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file onewire.cc Class for 1wire sensors
+
 #include <boost/algorithm/string.hpp>
 #include <boost/filesystem.hpp>
 #include <boost/regex.hpp>
diff --git a/devices/onewire.h b/devices/onewire.h
index 3e7a2e2..7e454a9 100644
--- a/devices/onewire.h
+++ b/devices/onewire.h
@@ -15,10 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-//
-// \brief Class for 1wire sensors
-// \copyright GNU Public License.
-//
+/// \copyright GNU Public License.
+/// \file onewire.h Class for 1wire sensors
+
 #ifndef __ONEWIRE_H__
 #define __ONEWIRE_H__
 
@@ -53,6 +52,7 @@ typedef struct onewire {
     std::string device;         ///< The full device name
     family_e    type;           ///< The type of 1wire sensor
     bool bus;                   ///< Whether the data is in owfs or not
+    bool active;                ///< Whether the device is active
 } onewire_t;
 
 /// \struct temperature_t
diff --git a/devices/outbackpower.cc b/devices/outbackpower.cc
index 1fc0c64..3081526 100644
--- a/devices/outbackpower.cc
+++ b/devices/outbackpower.cc
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -16,6 +17,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file outbackpower.cc Class that implements the Outback
+///                       Power remote interface.
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
diff --git a/devices/outbackpower.h b/devices/outbackpower.h
index 165aba9..08c7a76 100644
--- a/devices/outbackpower.h
+++ b/devices/outbackpower.h
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006-2018.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -16,6 +17,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file outbackpower.h Header file for class that implements the Outback
+///                      Power remote interface.
+
 #ifndef __OUTBACK_POWER_H__
 #define __OUTBACK_POWER_H__
 
diff --git a/devices/ownet.cc b/devices/ownet.cc
index 6d7d8c8..3ca0531 100644
--- a/devices/ownet.cc
+++ b/devices/ownet.cc
@@ -15,6 +15,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file ownet.h Header file Ownet class, which is a wrapper for the owfs
+///               library to read Dallas Semiconductor 1 Wire sensors.
+
 #include <boost/algorithm/string.hpp>
 #include <boost/shared_ptr.hpp>
 #include <boost/make_shared.hpp>
@@ -31,7 +35,7 @@ const int OWPORT = 4304;        ///< TCP/IP port for owserver
 const char *OWHOST = "localhost"; ///< Remote hostname for owserver
 
 /// \class Ownet
-/// Consruct a class for OWNet support
+/// Construct a class for OWNet support
 Ownet::Ownet(void)
     : _poll_sleep(300),
       _scale('F'),
@@ -39,18 +43,17 @@ Ownet::Ownet(void)
 {
 //    DEBUGLOG_REPORT_FUNCTION;
     
-    // Initialize the table of family types
-    initTable(_family);
+    initTable(_family);      ///< Initialize the table of family types
 }
 
 ///
-/// Consruct a class for OWNet support connected to a remote host
+/// Consrruct a class for OWNet support connected to a remote host
 /// @param host Hostname of the remote owserver
 Ownet::Ownet(std::string &host)
     : Ownet()
 {
 //    DEBUGLOG_REPORT_FUNCTION;
-    int retries = 2;
+    int retries = 3;
     if (host.find(':') == std::string::npos) {
         host += ":" + std::to_string(OWPORT);
     }
@@ -67,12 +70,19 @@ Ownet::Ownet(std::string &host)
                 << "Couldn't connect to owserver with " << argv;
             //return;
         } else {
-            BOOST_LOG(lg) << "Connected to owserver on host " << host;
+            BOOST_LOG_SEV(lg, severity_level::info)
+                << "Connected to owserver on host " << host;
             _owserver = true;
             break;
         }
     }
 
+    if (retries <= 0) {
+        BOOST_LOG_SEV(lg, severity_level::error)
+            << "Giving up trying to connect to host " << host;
+        return;
+    }
+
     // Setup ownet
     OW_set_error_print("2"); // 0=mixed  output,  1=syslog, 2=console.
     OW_set_error_level("0"); // (0=default, 1=err_connect, 2=err_call,
@@ -112,10 +122,13 @@ Ownet::Ownet(std::string &host)
         std::lock_guard<std::mutex> guard(_mutex);
         _sensors[*it] = data;
         std::string device = *it;
+        // Note that this device string contains a terminating '/'.
         switch (data->type) {
           case TEMPERATURE:
           {
               BOOST_LOG(lg) << device << " is a thermometer";
+              //setValue("templow", 0);
+              //setValue("temphigh", 0);
               boost::shared_ptr<temperature_t> temp(getTemperature(device));
               if (temp) {
                   try {
@@ -146,6 +159,13 @@ Ownet::Ownet(std::string &host)
               }
               break;
           }
+          // DCVOLTAGE:
+          // AUTH:
+          // CLOCK:
+          // THERMCOUPLE:
+          // MOISTURE:
+          // UNSUPPORTED:
+          //   BOOST_LOG_SEV(lg, severity_level::warning) << "Unsupported"
         };
 
     }
diff --git a/devices/ownet.h b/devices/ownet.h
index b9b2b4c..c6b7dff 100644
--- a/devices/ownet.h
+++ b/devices/ownet.h
@@ -15,6 +15,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file ownet.h Header file Ownet class, which is a wrapper for the owfs
+///               library to read Dallas Semiconductor 1 Wire sensors.
+
 #ifndef __OWNET_H__
 #define __OWNET_H__
 
diff --git a/devices/serial.cc b/devices/serial.cc
index d8076b3..f41e860 100644
--- a/devices/serial.cc
+++ b/devices/serial.cc
@@ -17,6 +17,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file serial.cc Class for manipulating serial ports
+
 // This is generated by autoconf
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -180,12 +183,12 @@ Serial::Open(std::string &filespec)
     // set the timeout value for communications
     if (SetTimeout (20, errcond) == ERROR) {
         BOOST_LOG(lg) << "ERROR: Couldn't set the timeout value";
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
     DumpTtyState();
 #endif
 
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 /// Close the serial port
@@ -205,7 +208,7 @@ Serial::Close(void)
     _uartfd = -1;
     uartfile = 0;
   
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 /// Flush data in the serial port so it gets out
@@ -216,7 +219,7 @@ Serial::Flush  (void)
 {
     tcflush(_uartfd, TCIOFLUSH);
 
-    errc::make_error_code(errc::success);               // FIXME: this should 
be a real check
+    return errc::make_error_code(errc::success);               // FIXME: this 
should be a real check
 }
 
 
@@ -347,7 +350,7 @@ if ((sret == 0) && (ret <= 0)) {
 
 //seriallogfile << "<read>" << buf << "</read>" << std::endl;
 } else {
-      errc::make_error_code(errc::not_supported);
+      return errc::make_error_code(errc::not_supported);
   }
 #endif
 
@@ -409,7 +412,7 @@ Serial::SetBaud (int baudcode)
     int ret = tcsetattr(_uartfd, TCSANOW, &ctty);
     if (ret == 0) {
         BOOST_LOG(lg) << __PRETTY_FUNCTION__ << " worked" << std::endl;
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
   
     seriallogfile << "<device><baud>\"" << serial_speeds[baudcode] << 
"\"</baud></device>" << std::endl;
@@ -422,7 +425,7 @@ Serial::SetBaud (int baudcode)
     BOOST_LOG(lg) << "Output baud is now set to " << serial_speeds[obaud] << 
std::endl;
 
     BOOST_LOG(lg) << __PRETTY_FUNCTION__ << " failed" << std::endl;
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 #if 0
@@ -434,7 +437,7 @@ Serial::send_break (struct errcond *err) const
     
     tcsendbreak (Device::fd, 0);
 
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 #endif
 
@@ -454,7 +457,7 @@ Serial::SetBlocking(bool mode)
   
     tcsetattr(_uartfd, TCSANOW, &currenttty);
 
-    errc::make_error_code(errc::success);               // FIXME: this should 
be a real check
+    return errc::make_error_code(errc::success);               // FIXME: this 
should be a real check
 }
 
 //  modem control lines
@@ -495,7 +498,7 @@ Serial::SetDTR (bool value)
 
     ioctl(_uartfd, TIOCMSET, (unsigned long) &arg);
 
-    errc::make_error_code(errc::success);               // FIXME: this should 
be a real check
+    return errc::make_error_code(errc::success);               // FIXME: this 
should be a real check
 }
 
 /// Set Raw mode for th serial port
@@ -528,7 +531,7 @@ Serial::SetRaw (void)
   
     tcsetattr(_uartfd, TCSANOW, &currenttty);
 
-    errc::make_error_code(errc::success);               // FIXME: this should 
be a real check
+    return errc::make_error_code(errc::success);               // FIXME: this 
should be a real check
 }
 
 void
diff --git a/devices/serial.h b/devices/serial.h
index 2b2dbb3..6730383 100644
--- a/devices/serial.h
+++ b/devices/serial.h
@@ -17,6 +17,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file serial.h Header file for serial port manipulation class
+
 #ifndef __SERIAL_H__
 #define __SERIAL_H__
 
diff --git a/devices/xanbus.cc b/devices/xanbus.cc
index c86dc1a..9ae9704 100644
--- a/devices/xanbus.cc
+++ b/devices/xanbus.cc
@@ -1,5 +1,7 @@
 // 
-// Copyright (C) 2011 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
+//      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -15,6 +17,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file xanbus.c Implemntation of the Xantrex remote protocol
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
diff --git a/devices/xanbus.h b/devices/xanbus.h
index 47185b3..026f579 100644
--- a/devices/xanbus.h
+++ b/devices/xanbus.h
@@ -1,6 +1,7 @@
 // 
-// Copyright (C) 2011-2018
-// Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
+//      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +17,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file xanbus.h Implemntation of the Xantrex remote protocol
+
+
 #ifndef  __XANBUSUI_H__
 #define __XANBUSUI_H__
 
diff --git a/devices/xantrex-trace.cc b/devices/xantrex-trace.cc
index f1670cc..f0b2582 100644
--- a/devices/xantrex-trace.cc
+++ b/devices/xantrex-trace.cc
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -16,6 +17,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file xantrex-trace.cc This class uses the remote control command
+///                       shell in the inverter to simulate a human.
+
 #ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
diff --git a/devices/xantrex-trace.h b/devices/xantrex-trace.h
index 83ce318..1694469 100644
--- a/devices/xantrex-trace.h
+++ b/devices/xantrex-trace.h
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006-2018.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -16,6 +17,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \copyright GNU Public License.
+/// \file xantrex-trace.h This class uses the remote control command
+///                       shell in the inverter to simulate a human.
+
 #ifndef  __XANTREXUI_H__
 #define __XANTREXUI_H__
 
diff --git a/doc/C/Makefile.am b/doc/C/Makefile.am
index 728e8a3..1737770 100644
--- a/doc/C/Makefile.am
+++ b/doc/C/Makefile.am
@@ -18,7 +18,10 @@
 include $(top_srcdir)/doc/xmldocs.make
 
 #STYLESDIR = @docbook_styles@
+# Debian/Ubuntu
 STYLESDIR = /usr/share/xml/docbook/stylesheet/docbook-xsl
+# Fedora
+# STYLESDIR = /usr/share/sgml/docbook/xsl-stylesheets-1.79.2
 EXTRA_DIST += \
        powerguru.html \
        pgd.1
diff --git a/doc/C/pgd-man.xml b/doc/C/pgd-man.xml
index abab859..e007ed7 100644
--- a/doc/C/pgd-man.xml
+++ b/doc/C/pgd-man.xml
@@ -2,12 +2,12 @@
                    "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd";
 [
   <!ENTITY legal SYSTEM "legal.xml">
-  <!ENTITY appversion "0.1">
-  <!ENTITY manrevision "0.1">
+  <!ENTITY appversion "0.2">
+  <!ENTITY manrevision "0.2">
   <!ENTITY date "April 2005">
   <!ENTITY app "<application>PowerGuru</application>">
   <!ENTITY appname "Power Guru">
-  <!ENTITY version "2.0">
+  <!ENTITY version "3.0">
   <!ENTITY protodoc SYSTEM "protocol.xml"> 
   <!ENTITY maindoc SYSTEM "protocol.xml">
 ]
diff --git a/doc/C/powerguru.xml b/doc/C/powerguru.xml
index ed0a3f7..6365ff4 100644
--- a/doc/C/powerguru.xml
+++ b/doc/C/powerguru.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" 
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd";>
 <article lang="en">
   <articleinfo>
-    <title>PowerGuru Manual V0.2</title>
+    <title>PowerGuru Manual V0.3</title>
     <subtitle/>
     <edition/>
     <releaseinfo>This manual describes version  of .
diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index bd8d45f..cbd914f 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -945,6 +945,14 @@ EXCLUDE            = @top_srcdir@/python/onewire.py \
                        @top_srcdir@/lib/snmp.h \
                        @top_srcdir@/lib/msgs.cc \
                        @top_srcdir@/lib/msgs.h \
+                       @top_srcdir@/lib/gdb.h \
+                       @top_srcdir@/snmp/outback.c \
+                       @top_srcdir@/snmp/outback.h \
+                       @top_srcdir@/snmp/xantrex.c \
+                       @top_srcdir@/snmp/powerguru.c \
+                       @top_srcdir@/client/outback.cc
+                       @top_srcdir@/client/outback.cc
+                       @top_srcdir@/snmp/xantrex.h \
                        @top_srcdir@/client/outback.cc
                        
                        
\ No newline at end of file
diff --git a/doc/Makefile.am b/doc/Makefile.am
index f2b3c57..6e90778 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -19,8 +19,11 @@ if ENABLE_DOXYGEN
 
 .PHONY: apidoc
 
+files = chart.py mergdb.py pgd.py rtl433.py options.py sensor.py
 apidoc: 
-       $(DOXYGEN) $<
+       export EXCLUDE=$(top_srcdir)/python/onewire.py
+       $(shell) EXCLUDE=$(top_srcdir)/python/onewire.py $(DOXYGEN)
+#      $(DOXYGEN) $<
 
 clean-generic:
        rm -Rf apidoc
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 0859195..d39626d 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -41,8 +41,6 @@ libpguru_la_SOURCES = \
        log.cc log.h \
        console.cc console.h \
        database.h
-#      tcputil.cc tcputil.h \
-#      tcpip.cc tcpip.h
 
 if BUILD_OUTBACK
 libpguru_la_SOURCES += msgs.cc msgs.h menuitem.cc menuitem.h
@@ -54,12 +52,6 @@ libpguru_la_CPPFLAGS += $(LIBXML_CPPFLAGS)
 libpguru_la_LIBDADD += $(LIBXML_LIBS)
 endif
 
-if BUILD_SNMP
-libpguru_la_SOURCES += snmp.cc snmp.h
-libpguru_la_CPPFLAGS += -I$(top_srcdir)/snmp
-libpguru_la_LIBDADD += $(SNMP_LIBS) ../snmp/libpgsnmp.la
-endif
-
 if BUILD_MARIADB
 libpguru_la_SOURCES += mariadb.cc
 libpguru_la_LIBDADD += $(MARIADB_LIBS)
diff --git a/lib/commands.cc b/lib/commands.cc
index 096400b..10dd4c5 100644
--- a/lib/commands.cc
+++ b/lib/commands.cc
@@ -1,6 +1,5 @@
 // 
-// Copyright (C) 2018, 2019
-//      Free Software Foundation, Inc.
+// Copyright (C) 2018,2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file commands.cc Class to create and parse simple XML messages between
+///                   the client and the server.
+
 // This is generated by autoconf
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -33,7 +35,8 @@
 #include "commands.h"
 
 //    <NOP></NOP>
-//    <LIST><DEVICES></DEVICES></LIST>
+//    
<TRIGGER><ID></ID><NAME></NAME><TYPE>type</TYPE><TIMESTAMP></TIMESTAMP></></TRIGGER>
+//    <LIST><SENSORS>id or all</SENSORS></LIST>
 //    <POLL><DEVICE>name</DEVICE></POLL>
 //    <POLL><INTERVAL>seconds</INTERVAL></POLL>
 //    <HELO></HELO>
@@ -43,6 +46,7 @@ Commands::Commands()
 //    DEBUGLOG_REPORT_FUNCTION;
 
     _commands["nop"] = Commands::NOP;
+//    _commands["trigger"] = Commands::TRIGGER;
     _commands["list"] = Commands::LIST;
     _commands["poll"] = Commands::POLL;
     _commands["helo"] = Commands::HELO;
@@ -90,6 +94,10 @@ Commands::createCommand(cmd_t cmd, const std::string &args,
           BOOST_LOG_SEV(lg, severity_level::debug) << "create NOP command: " 
<< args;
           str += "<nop>" + args + "</nop>";
           break;
+//      case TRIGGER:
+//          BOOST_LOG_SEV(lg, severity_level::debug) << "create TRIGGER 
command: " << args;
+//          str += "<nop>" + args + "</nop>";
+//          break;
       case RESULT:
           BOOST_LOG_SEV(lg, severity_level::debug) << "create RESULT command: 
" << args;
           str += "<result>" + args + "</result>";
diff --git a/lib/commands.h b/lib/commands.h
index f8f852d..303120b 100644
--- a/lib/commands.h
+++ b/lib/commands.h
@@ -1,6 +1,5 @@
 // 
-// Copyright (C) 2018
-//      Free Software Foundation, Inc.
+// Copyright (C) 2018,2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +15,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file commands.h Class to create and parse simple XML messages between
+///                  the client and the server.
+
 #ifndef __COMMANDS_H__
 #define __COMMANDS_H__
 
@@ -32,7 +34,7 @@
 class Commands 
 {
 public:
-    typedef enum { NOP, LIST, POLL, HELO, RESULT } cmd_t; 
+    typedef enum { NOP, LIST, POLL, HELO, RESULT, EVENT } cmd_t; 
     Commands();
     ~Commands();
     std::string &createNode(cmd_t cmd, const std::string &args,
diff --git a/lib/console.cc b/lib/console.cc
index 540af40..18c02ac 100644
--- a/lib/console.cc
+++ b/lib/console.cc
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -19,6 +19,9 @@
 // This sets up a console for user interaction, and defaults to using
 // standard in.
 
+/// \file lib/console.cc The class creates a console for the user to
+///                     control the pgd daemon.
+
 #include <cstring>
 #include <cstdio>
 
diff --git a/lib/console.h b/lib/console.h
index 09b221f..24d4f66 100644
--- a/lib/console.h
+++ b/lib/console.h
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file lib/console.h The class creates a console for the user to
+///                     control the pgd daemon.
+
 #ifndef __CONSOLE_H__
 #define __CONSOLE_H__
 
diff --git a/lib/database.h b/lib/database.h
index 7f7abc4..b5b8612 100644
--- a/lib/database.h
+++ b/lib/database.h
@@ -17,6 +17,8 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file database.h Generic wrapper class for database access.
+
 #ifndef __DATABASE_H__
 #define __DATABASE_H__
 
diff --git a/lib/msgs.cc b/lib/msgs.cc
index f8e670a..2f459c0 100644
--- a/lib/msgs.cc
+++ b/lib/msgs.cc
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -97,7 +98,7 @@ Msgs::init(net_mode_e mode)
         if (createNetClient(hostname)) {
             BOOST_LOG(lg) << "Connected to server at " << hostname.c_str() << 
std::endl;
             init();                     // initialize the table of pointers
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         } else {
             BOOST_LOG(lg) << "ERROR: Couldn't create connection to server" << 
hostname.c_str()  << std::endl;
         }
@@ -109,7 +110,7 @@ Msgs::init(net_mode_e mode)
         BOOST_LOG(lg) << "ERROR: no mode specified! " << std::endl;
         _net_mode = NONET;
     }
-    errc::make_error_code(errc::not_supported);  
+    return errc::make_error_code(errc::not_supported);
 }
 
 // If a hostname is specifed, we force client mode.
@@ -132,11 +133,11 @@ Msgs::init(const std::string &hostname)
         init();                     // initialize the table of pointers
         _net_mode = CLIENT;
         writeNet(heloCreate(_version));
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     } else {
         BOOST_LOG(lg) << "ERROR: Couldn't create connection to server" << 
hostname  << std::endl;
     }
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 boost::system::error_code
@@ -149,7 +150,7 @@ Msgs::init(net_mode_e mode, bool block)
         if (createNetClient(hostname)) {
             BOOST_LOG(lg) << "Connected to server at " << hostname.c_str() << 
std::endl;
             init();                     // initialize the table of pointers
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         } else {
             BOOST_LOG(lg) << "ERROR: Couldn't create connection to server" << 
hostname.c_str()  << std::endl;
         }
@@ -161,7 +162,7 @@ Msgs::init(net_mode_e mode, bool block)
         BOOST_LOG(lg) << "ERROR: no mode specified! " << std::endl;
         _net_mode = NONET;
     }
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
                
 boost::system::error_code
@@ -181,11 +182,11 @@ Msgs::init(bool block)
         BOOST_LOG(lg) << "New connection started for remote client." << 
std::endl;
         _net_mode = DAEMON;
         writeNet(heloCreate(_version));
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     } else {
         BOOST_LOG(lg) << "ERROR: Couldn't create a new connection!" << 
std::endl;
     }
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
   
@@ -267,7 +268,7 @@ Msgs::init(void)
         _cache[ "sell-amps"] = "444444444444";
     }
   
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 std::string &
@@ -309,7 +310,7 @@ Msgs::cacheAdd(const std::string &name, const std::string 
&str)
     _cache[name] = str;
 
     // FIXME: we should make sure this actually worked.
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 
@@ -436,9 +437,9 @@ Msgs::unimplementedProcess(XMLNode *xml)
     _body << ends;
 
     if (writeNet(_body.str())) {
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     } else {
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 }
 
@@ -1025,15 +1026,15 @@ Msgs::statusProcess(XMLNode &node)
         }
     
         if (writeNet(str)) {
-            errc::make_error_code(errc::not_supported);
+            return errc::make_error_code(errc::not_supported);
         } else {
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         }
     }
 
     if (_net_mode == CLIENT) {
         if (strcmp(node->nameGet(),  "status") == 0) {
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         }
 
 #if 0
@@ -1053,10 +1054,10 @@ Msgs::statusProcess(XMLNode &node)
         cacheAdd(node->nameGet(), node->valueGet());
         BOOST_LOG(lg) << "tag \"" << node->nameGet() << "\" has a value of: " 
<< node->valueGet() << std::endl;
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
   
-    errc::make_error_code(errc::not_supported);                 // FIXME: 
implement this method
+    return errc::make_error_code(errc::not_supported);                 // 
FIXME: implement this method
 }
 
 boost::system::error_code
@@ -1065,7 +1066,7 @@ Msgs::heloProcess(XMLNode &node)
     DEBUGLOG_REPORT_FUNCTION;
     BOOST_LOG(lg) << "WARNING: unimplemented method" << std::endl;
   
-    errc::make_error_code(errc::not_supported);                 // FIXME: 
implement this method
+    return errc::make_error_code(errc::not_supported);                 // 
FIXME: implement this method
 }
 
 boost::system::error_code
@@ -1097,9 +1098,9 @@ Msgs::metersProcess(XMLNode &node)
   
         std::string str = metersResponseCreate(node->valueGet(), value);
         if (writeNet(str)) {
-            errc::make_error_code(errc::not_supported);
+            return errc::make_error_code(errc::not_supported);
         } else {
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         }
     }
 
@@ -1108,7 +1109,7 @@ Msgs::metersProcess(XMLNode &node)
         // Process the result
     }
 
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 boost::system::error_code
@@ -1126,18 +1127,18 @@ Msgs::serverProcess(XMLNode &node)
                        << "\" with a value of " << attr->valueGet() << 
std::endl;
             if (strcmp(attr->valueGet(), (const char *)_thisip.c_str()) != 0) {
                 BOOST_LOG(lg) << "WARNING: IP's don't match!!!!" << std::endl;
-                errc::make_error_code(errc::not_supported);
+                return errc::make_error_code(errc::not_supported);
             }
         }
     }
 
     if (strcmp(node->valueGet(), (const char *)_thishost.c_str()) != 0) {
         BOOST_LOG(lg) << "WARNING: Host's don't match!!!!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
 
     BOOST_LOG(lg) << "Host and IP data match" << std::endl;
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1156,7 +1157,7 @@ Msgs::clientProcess(XMLNode &node)
                            << "\" with a value of " << attr->valueGet() << 
std::endl;
                 if (strcmp(attr->valueGet(), (const char *)_remoteip.c_str()) 
!= 0) {
                     BOOST_LOG(lg) << "WARNING: IP's don't match!!!!" << 
std::endl;
-                    errc::make_error_code(errc::not_supported);
+                    return errc::make_error_code(errc::not_supported);
                 }
             }
         }
@@ -1165,11 +1166,11 @@ Msgs::clientProcess(XMLNode &node)
     if (_remotehost.size() != 0) {
         if (strcmp(node->valueGet(), (const char *)_remotehost.c_str()) != 0) {
             BOOST_LOG(lg) << "WARNING: Host's don't match!!!!" << std::endl;
-            errc::make_error_code(errc::not_supported);
+            return errc::make_error_code(errc::not_supported);
         }
     }
 
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 // Process the top level header tag.
@@ -1197,7 +1198,7 @@ Msgs::powerguruProcess(XMLNode &node)
         }
     }
 
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1209,10 +1210,10 @@ Msgs::chargeAmpsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1224,24 +1225,24 @@ Msgs::loadAmpsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        //    errc::make_error_code(errc::not_supported);
+        //    return errc::make_error_code(errc::not_supported);
     }
   
     if (_net_mode == CLIENT) {
         BOOST_LOG(lg) << "Battery voltage is: " << node->valueGet() << 
std::endl;
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 
 #if 0
     if (_net_mode == DAEMON) {
         std::string str = metersResponseCreate(node->valueGet(), 
_cache[node->nameGet()]);
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 #endif
     
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1253,10 +1254,10 @@ Msgs::pvAmpsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1268,10 +1269,10 @@ Msgs::pvVoltsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1283,10 +1284,10 @@ Msgs::dailyKwhProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1298,10 +1299,10 @@ Msgs::hertzProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1313,24 +1314,24 @@ Msgs::batteryVoltsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        //    errc::make_error_code(errc::not_supported);
+        //    return errc::make_error_code(errc::not_supported);
     }
 
     if (_net_mode == CLIENT) {
         BOOST_LOG(lg) << "Battery voltage is: " << node->valueGet() << 
std::endl;
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 
 #if 0
     if (_net_mode == DAEMON) {
         std::string str = metersResponseCreate(node->valueGet(), 
_cache[node->nameGet()]);
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 #endif
     
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 boost::system::error_code
@@ -1342,10 +1343,10 @@ Msgs::buyAmpsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1357,10 +1358,10 @@ Msgs::sellAmpsProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1372,10 +1373,10 @@ Msgs::acVoltsOutProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
   
 boost::system::error_code
@@ -1387,10 +1388,10 @@ Msgs::ac1InProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1402,10 +1403,10 @@ Msgs::ac2InProcess(XMLNode &node) {
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
       
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -1418,9 +1419,9 @@ Msgs::findTag(std::string tag)
 
     _body << "<" << tag << ">";
     if ((pos = tag.find(_body.str(), 0)) != std::string::npos) {
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 
@@ -1435,7 +1436,7 @@ Msgs::commandProcess(XMLNode &node)
       
     if (node->valueGet() <= 0) {
         BOOST_LOG(lg) << "ERROR: no value in messages!" << std::endl;
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
 
     _body.str("");
@@ -1457,23 +1458,23 @@ Msgs::commandProcess(XMLNode &node)
             str = responseCreate(RESPONSE, node->valueGet(), "foobar");
         }
         if (writeNet(str + "\r\n")) {
-            errc::make_error_code(errc::not_supported);
+            return errc::make_error_code(errc::not_supported);
         } else {
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         }
     }
 
     if (_net_mode == CLIENT) {
         if (strcmp(node->nameGet(), "command") == 0) {
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
         }
         cacheAdd(node->nameGet(), node->valueGet());
         BOOST_LOG(lg) << "tag \"" << node->nameGet() << "\" has a value of: " 
<< node->valueGet() << std::endl;
     
-        errc::make_error_code(errc::success);
+        return errc::make_error_code(errc::success);
     }
 
-    errc::make_error_code(errc::not_supported);  
+    return errc::make_error_code(errc::not_supported);  
 }
 
 // local Variables:
diff --git a/lib/postgresql.cc b/lib/postgresql.cc
index 44e1e86..8a20aa1 100644
--- a/lib/postgresql.cc
+++ b/lib/postgresql.cc
@@ -1,6 +1,5 @@
 // 
-// Copyright (C) 2018
-//      Free Software Foundation, Inc.
+// Copyright (C) 2018,2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +15,8 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file postgresql.cc Wrapper class for accessing a Postgresql database.
+
 // This is generated by autoconf
 #ifdef HAVE_CONFIG_H
 #include "config.h"
diff --git a/lib/proc.cc b/lib/proc.cc
index 8e01a6e..b705f92 100644
--- a/lib/proc.cc
+++ b/lib/proc.cc
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,8 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file proc.cc Manage a sub-process.
+
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <cstdio>
diff --git a/lib/proc.h b/lib/proc.h
index c768941..bdf23c6 100644
--- a/lib/proc.h
+++ b/lib/proc.h
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,8 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file proc.h Manage a sub-process.
+
 #include <cstring>
 #include <map>
 
diff --git a/lib/rc.cc b/lib/rc.cc
index b01be32..d20f6ea 100644
--- a/lib/rc.cc
+++ b/lib/rc.cc
@@ -35,18 +35,22 @@
 #include <boost/system/error_code.hpp>
 using namespace boost::system;
 
-RCinitFile::RCinitFile()
+RCinitFile::RCinitFile(void)
 {
+    DEBUGLOG_REPORT_FUNCTION;
 }
 
-RCinitFile::~RCinitFile()
+RCinitFile::~RCinitFile(void)
 {
+    DEBUGLOG_REPORT_FUNCTION;
 }
 
 // Look for a config file in the likely places.
 boost::system::error_code
-RCinitFile::load_files()
+RCinitFile::load_files(void)
 {
+    DEBUGLOG_REPORT_FUNCTION;
+
     char *home;
     std::string loadfile;
   
@@ -66,22 +70,25 @@ RCinitFile::load_files()
         return parse_file(loadfile);
     }
   
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 // Parse the config file and set the variables.
 boost::system::error_code
-RCinitFile::parse_file(std::string &filespec)
+RCinitFile::parse_file(const std::string &filespec)
 {
+    DEBUGLOG_REPORT_FUNCTION;
+
     struct stat stats;
     std::string action;
     std::string variable;
     std::string value;
     std::ifstream in;
 
-    BOOST_LOG(lg) << "Seeing if " << filespec << " exists.";
+     BOOST_LOG(lg) << "Seeing if " << filespec << " exists.";
     if (filespec.size() == 0) {
-        errc::make_error_code(errc::not_supported);
+         _errorcode = errc::make_error_code(errc::not_supported);
+         return _errorcode;
     }
   
     if (stat(filespec.c_str(), &stats) == 0) {
@@ -89,7 +96,8 @@ RCinitFile::parse_file(std::string &filespec)
     
         if (!in) {
             BOOST_LOG(lg) << "ERROR: Couldn't open file: " << filespec;
-            errc::make_error_code(errc::not_supported);
+            _errorcode = errc::make_error_code(errc::not_supported);
+            return _errorcode;
         }
 
         // Read in each line and parse it
@@ -136,21 +144,24 @@ RCinitFile::parse_file(std::string &filespec)
         if (in) {
             in.close();
         }
-        errc::make_error_code(errc::not_supported);
+        _errorcode = errc::make_error_code(errc::not_supported);
+        return _errorcode;
     }  
 
     if (in) {
         in.close();
     }
-    errc::make_error_code(errc::success);
+    _errorcode = errc::make_error_code(errc::success);
+    return _errorcode;
 }
 
 // Write the changed settings to the config file
 boost::system::error_code
-RCinitFile::update_file(std::string &filespec)
+RCinitFile::update_file(const std::string &filespec)
 {
     std::cerr << __PRETTY_FUNCTION__ << "ERROR: unimplemented!" << std::endl;
-    errc::make_error_code(errc::not_supported);
+    _errorcode = errc::make_error_code(errc::not_supported);
+    return _errorcode;
 }
 
 // local Variables:
diff --git a/lib/rc.h b/lib/rc.h
index fa674bb..13969aa 100644
--- a/lib/rc.h
+++ b/lib/rc.h
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -33,16 +34,16 @@ public:
     RCinitFile();
     ~RCinitFile();
     boost::system::error_code load_files();
-    boost::system::error_code parse_file(std::string &filespec);
-    boost::system::error_code update_file(std::string &filespec);
+    boost::system::error_code parse_file(const std::string &filespec);
+    boost::system::error_code update_file(const std::string &filespec);
 
     // Database config options
-    std::string dbhostGet()   { return _dbhost; }
-    std::string dbuserGet()   { return _dbuser; };
-    std::string dbpasswdGet() { return _dbpasswd; };
-    std::string dbnameGet()   { return _dbname; };
-    std::string devmodeGet()  { return _devmode; };
-    std::string deviceGet()   { return _device; };
+    std::string dbhostGet(void)   { return _dbhost; }
+    std::string dbuserGet(void)   { return _dbuser; };
+    std::string dbpasswdGet(void) { return _dbpasswd; };
+    std::string dbnameGet(void)   { return _dbname; };
+    std::string devmodeGet(void)  { return _devmode; };
+    std::string deviceGet(void)   { return _device; };
 
 private:
     std::string _filespec;
@@ -52,6 +53,7 @@ private:
     std::string _dbname;
     std::string _devmode;
     std::string _device;
+    boost::system::error_code _errorcode;
 }; 
 
 // __RC_H__
diff --git a/lib/sharedlib.cc b/lib/sharedlib.cc
index 8bdb8df..0d1694d 100644
--- a/lib/sharedlib.cc
+++ b/lib/sharedlib.cc
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -56,7 +57,7 @@ SharedLib::OpenLib (string &filespec, ErrCond &Err)
           case ENOENT:
               Err.SetMsg("Specified shared library doesn't exist");
               BOOST_LOG(lg) << "ERROR: Dynamic library, " << filespec << " 
doesn't exist!" << endl;
-              errc::make_error_code(errc::not_supported);
+              return errc::make_error_code(errc::not_supported);
               break;
         }
     }
@@ -77,7 +78,7 @@ SharedLib::OpenLib (string &filespec, ErrCond &Err)
 
     if (errors) {
         Err << "Couldn't initialize ltdl";
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
 
     BOOST_LOG(lg) << "Initialized ltdl" << endl;
@@ -94,7 +95,7 @@ SharedLib::OpenLib (string &filespec, ErrCond &Err)
     errors = lt_dladdsearchdir (abelmon);
     if (errors) {
         Err << lt_dlerror();
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
 
     BOOST_LOG(lg) << "Added " << abelmon << " to the search paths" << endl;
@@ -105,13 +106,13 @@ SharedLib::OpenLib (string &filespec, ErrCond &Err)
 
     if (dlhandle == NULL) {
         Err << lt_dlerror();
-        errc::make_error_code(errc::not_supported);
+        return errc::make_error_code(errc::not_supported);
     }
 
     dlname = filespec;
   
     BOOST_LOG(lg) << "Opened dynamic library " << filespec << endl;
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 entrypoint *
@@ -175,7 +176,7 @@ SharedLib::ScanDir (void) {
         // we get all the duplicates.
         entry = readdir(library_dir);
         if ((int)entry < 1)
-            errc::make_error_code(errc::success);
+            return errc::make_error_code(errc::success);
 
         //    handle = dlopen (entry->d_name, RTLD_NOW|RTLD_GLOBAL);
         dlhandle = lt_dlopen (entry->d_name);
diff --git a/macros/snmp.m4 b/macros/snmp.m4
index dc3dc6a..1f4cb15 100644
--- a/macros/snmp.m4
+++ b/macros/snmp.m4
@@ -29,14 +29,6 @@ dnl AC_ARG_ENABLE(snmptest, [  --disable-snmptest       Do 
not try to compile an
     SNMP_LIBS="-L$libdir"
   fi
 
-dnl   if test "x$snmp_includes" != "x" ; then
-dnl     SNMP_CFLAGS="-I$snmp_includes"
-dnl   elif test "x$snmp_prefix" != "x" ; then
-dnl     SNMP_CFLAGS="-I$snmp_prefix/include"
-dnl   elif test "$prefix" != "xNONE"; then
-dnl     SNMP_CFLAGS="-I$prefix/include"
-dnl   fi
-
   AC_MSG_CHECKING(for NET-SNMP headers and flags)
   no_snmp=""
 
diff --git a/powerguru.sql b/powerguru.sql
index b6389d3..6d9780a 100644
--- a/powerguru.sql
+++ b/powerguru.sql
@@ -43,6 +43,22 @@ CREATE TYPE public.channel_type AS ENUM (
     'X'
 );
 
+DROP TYPE IF EXISTS trigger_type;
+CREATE TYPE public.trigger_type AS ENUM (
+    'FIRE_STARTED',
+    'FIRE_OUT',
+    'DOOR_OPEN',
+    'DOOR_CLOSED',
+    'WINDOW_OPEN',
+    'WINDOW_CLOSED',
+    'GENERIC',
+    'DEVICE_ON',
+    'DEVICE_OFF',
+    'HOME_LEAVE',
+    'HOME_ARRIVE',
+    'ADD_FIREWOOD'
+);
+
 DROP TYPE IF EXISTS volt_type;
 CREATE TYPE public.volt_type AS ENUM (
     'AC',
@@ -107,6 +123,14 @@ CREATE TABLE sensors (
   channel channel_type NOT NULL default 'A'
 );
 
+DROP TABLE IF EXISTS triggers;
+CREATE TABLE triggers (
+  id varchar(12) NOT NULL default '0',
+  name varchar(24) NOT NULL default '0',
+  trigger trigger_type NOT NULL default 'GENERIC',
+  "timestamp" timestamp without time zone UNIQUE
+);
+
 DROP TABLE IF EXISTS weather;
 CREATE TABLE weather (
   id varchar(12) NOT NULL default '0',
diff --git a/python/chart.py b/python/chart.py
index 710238a..3808ca9 100755
--- a/python/chart.py
+++ b/python/chart.py
@@ -17,7 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
-
+## \copyright GNU Public License.
 ## \file chart.py This file plots the data from a postgresql database.
 
 import epdb
diff --git a/python/gpio433.py b/python/gpio433.py
index 67cad5a..4fd46c8 100755
--- a/python/gpio433.py
+++ b/python/gpio433.py
@@ -15,7 +15,8 @@
 #  You should have received a copy of the GNU General Public License
 #  along with this program; if not, write to the Free Software
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
+
+## \copyright GNU Public License.
 
 import sys
 import epdb
diff --git a/python/gpiots.py b/python/gpiots.py
index 9bd08c9..e2cfa11 100755
--- a/python/gpiots.py
+++ b/python/gpiots.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file gpiots.py Wrapper to read wireless 433Mhz data when using circuit
 ##                 board dedicated 433Mhz transceiver instead of an RTL-SDR
 ##                 USB radio dongle.
diff --git a/python/i2c.py b/python/i2c.py
index 8121118..33bc297 100644
--- a/python/i2c.py
+++ b/python/i2c.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file i2c.py Read data from an i2c sensor,. Currently only the
 ##              ina219 current sensor is support.
 
diff --git a/python/mergedb.py b/python/mergedb.py
index 0ef238b..33b4297 100755
--- a/python/mergedb.py
+++ b/python/mergedb.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file mergedb.py This file merges the data from a remote postgresql database
 ##                into a local one.
 
diff --git a/python/onewire.py b/python/onewire.py
index 511263b..d826355 100755
--- a/python/onewire.py
+++ b/python/onewire.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file onewire.py Setup data array  to convert sensor ID to the type
 ##                  of sensor and other configuration data,
 
diff --git a/python/options.py b/python/options.py
index e306171..4614c4c 100644
--- a/python/options.py
+++ b/python/options.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file options.py Base class for command line option processing.
 
 import epdb
diff --git a/python/ownet.py b/python/ownet.py
index 4429081..690159c 100755
--- a/python/ownet.py
+++ b/python/ownet.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file ownet.py Wrapper for pyownet and database support for this
 ##                data.
 
diff --git a/python/pgd.py b/python/pgd.py
index b75664e..5aa9a75 100755
--- a/python/pgd.py
+++ b/python/pgd.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file pgd.py Daemon to read sensors and data log it all.
 
 import epdb
diff --git a/python/postgresql.py b/python/postgresql.py
index 3de235a..7b0058b 100755
--- a/python/postgresql.py
+++ b/python/postgresql.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file postgresql.py Wrapper for the psycopg2 module
 
 import epdb
diff --git a/python/remote.py b/python/remote.py
index fd8ad45..d893f0b 100644
--- a/python/remote.py
+++ b/python/remote.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file remote.py Handler for remote commands to the pgd daemon.
 
 import epdb
diff --git a/python/rtl433.py b/python/rtl433.py
index 216f574..f707ce5 100755
--- a/python/rtl433.py
+++ b/python/rtl433.py
@@ -17,7 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
-
+## \copyright GNU Public License.
 ## \file rtl433.py This file use the rtl_433 utility to collect data
 ##                 from wireless sensors using an RTL-SDR USB dongle.
 
diff --git a/python/rtlsdr.py b/python/rtlsdr.py
index 2ec80ba..2176955 100755
--- a/python/rtlsdr.py
+++ b/python/rtlsdr.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file rtlsdr.py Read data from an RTL-SDR USB dongle
 
 #import epdb
diff --git a/python/sensor.py b/python/sensor.py
index f5ecd18..b695483 100755
--- a/python/sensor.py
+++ b/python/sensor.py
@@ -17,6 +17,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file sensor.py These class contain all the data about each sensor,
 ##                 and methods to operate on that data.
 
diff --git a/python/triggers.py b/python/triggers.py
index a28eb42..3a4c9ca 100644
--- a/python/triggers.py
+++ b/python/triggers.py
@@ -16,6 +16,7 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
 ## \file triggers.py These classes add a trigger event timestamp
 ##                   into the database so we can relate the changes
 ##                   we see in the data to real world events. ie...
diff --git a/python/weather.py b/python/weather.py
index 4cd1eb9..fddd930 100755
--- a/python/weather.py
+++ b/python/weather.py
@@ -17,6 +17,9 @@
 #  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #
 
+## \copyright GNU Public License.
+## \file weather.py Class to hold weather data.
+
 import sys
 import epdb
 import logging
diff --git a/rpm/powerguru.spec b/rpm/powerguru.spec
index eb82764..e82107b 100644
--- a/rpm/powerguru.spec
+++ b/rpm/powerguru.spec
@@ -38,7 +38,7 @@ Powerguru is an program for monitoring, data logging, and 
controlling
 your inverter, charger controller, or power meter.
 
 %prep
-%setup -q -n powerguru-%{version}
+%setup -n powerguru-%{version}
 ./autogen.sh
 
 %build
diff --git a/rpm/rpm.am b/rpm/rpm.am
index fa21ecd..0b9cadc 100644
--- a/rpm/rpm.am
+++ b/rpm/rpm.am
@@ -80,7 +80,7 @@ rpm-install:
 # Unlike creating a deb, which build their own source tarball, rpm
 # requires we do it ourselves, and copy it to $HOME/rpmbuild/SOURCES
 # before rpmbuild will work.
-setup-rpm: 
+setup-rpm: distdir
        snapshot_version=$(SNAPSHOT_VERSION); \
        snapshot_dir="powerguru-`echo $${snapshot_version}|cut -d"~" -f1`"; \
        if test -d powerguru-$(PACKAGE_VERSION); then \
@@ -92,5 +92,6 @@ setup-rpm:
          --exclude=$${snapshot_dir}/configure.orig $${snapshot_dir}; \
        mkdir -p $(RPMBUILD_DIR)/SOURCES; \
        cp $${snapshot_dir}.tar.gz $(RPMBUILD_DIR)/SOURCES
+       mkdir powerguru-%{version}
 
 .PHONY : rpm distdir redhat spec rpm-configure rpm-install rpm-build setup-rpm
diff --git a/sim/fakeuart.cc b/sim/fakeuart.cc
index 6e766d5..43931bd 100644
--- a/sim/fakeuart.cc
+++ b/sim/fakeuart.cc
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
-//       Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file fakeuart.cc Class that create a fake UART for other programs can
+///                  connect to and retend it's a real serial port.
+
 #include <cstring>
 #include <unistd.h>
 
diff --git a/sim/fakeuart.h b/sim/fakeuart.h
index a069412..7ca0589 100644
--- a/sim/fakeuart.h
+++ b/sim/fakeuart.h
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006-2018 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -15,6 +16,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file fakeuart.h Class that create a fake UART for other programs can
+///                  connect to and retend it's a real serial port.
+
 #ifndef __FAKEUART_H__
 #define __FAKEUART_H__
 
diff --git a/sim/osim.cc b/sim/osim.cc
index c909565..543c1dc 100644
--- a/sim/osim.cc
+++ b/sim/osim.cc
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,10 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file osim.cc This create a simple hardware simulator for Outback
+///               devices so client side code can be debugged when not
+///               connected.
+
 // This is generated by autoconf.
 #ifdef HAVE_CONFIG_H
 # include "config.h"
diff --git a/snmp/powerguru.c b/snmp/powerguru.c
index 80a46c7..18e7f59 100644
--- a/snmp/powerguru.c
+++ b/snmp/powerguru.c
@@ -1,3 +1,24 @@
+// 
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
+// 
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+/// \file powerguru.cc SNMP bindings.
+/// \copyright GNU Public License.
+
 /*
  * Note: this file originally auto-generated by mib2c using
  *        : mib2c.scalar.conf,v 1.9 2005/01/07 09:37:18 dts12 Exp $
diff --git a/snmp/powerguru.h b/snmp/powerguru.h
index 20fc34e..9ba36aa 100644
--- a/snmp/powerguru.h
+++ b/snmp/powerguru.h
@@ -1,6 +1,6 @@
 // 
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
-//      Free Software Foundation, Inc.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -16,6 +16,9 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file powerguru.h SNMP bindings.
+/// \copyright GNU Public License.
+
 /*
  * Note: this file originally auto-generated by mib2c using
  *        : mib2c.scalar.conf,v 1.9 2005/01/07 09:37:18 dts12 Exp $
diff --git a/snmp/snmp.cc b/snmp/snmp.cc
index de7503c..030c2bf 100644
--- a/snmp/snmp.cc
+++ b/snmp/snmp.cc
@@ -17,8 +17,11 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-#ifdef HAVE_CONFIG_H
+/// \file snmp.h Wrapper for net-snmp.
+/// \copyright GNU Public License.
+
 // This is generated by autoconf.
+#ifdef HAVE_CONFIG_H
 # include "config.h"
 #endif
 
diff --git a/snmp/snmp.h b/snmp/snmp.h
index e8177c0..a7b9e1c 100644
--- a/snmp/snmp.h
+++ b/snmp/snmp.h
@@ -1,5 +1,5 @@
 // 
-k// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
 // 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
 
 // 
@@ -17,6 +17,9 @@ k// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
2012, 2013
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+/// \file snmp.h Wrapper for net-snmp.
+/// \copyright GNU Public License.
+
 #ifndef __SNMP_H__
 #define __SNMP_H__ 1
 
diff --git a/testsuite/libtests/cmd-test.cc b/testsuite/libtests/cmd-test.cc
index 0c86220..86bd935 100644
--- a/testsuite/libtests/cmd-test.cc
+++ b/testsuite/libtests/cmd-test.cc
@@ -95,7 +95,7 @@ public:
         }
         str.erase();
 
-        // Test oarsing XML commands
+        // Test parsing XML commands
         XML xml;
         std::string testnop = "<command></command>\n";
         if (!xml.parseMem(testnop)) {
diff --git a/testsuite/libtests/db-test.cc b/testsuite/libtests/db-test.cc
index beaa55d..adfcb19 100644
--- a/testsuite/libtests/db-test.cc
+++ b/testsuite/libtests/db-test.cc
@@ -60,13 +60,12 @@ public:
 
         std::vector<std::string> items;
 
-        // family | id | alias | chips | type | timestamp 
+        // family | id | alias | type | timestamp 
         result.clear();
         boost::shared_ptr<onewire_t> one(new onewire_t);
         one->family = "24";
         one->id = "97C6697351AB";
         one->alias = "";
-        one->chips = "DS2415";
         one->type = CLOCK;
         formatQuery(one, result);
 
@@ -74,8 +73,7 @@ public:
         std::cerr << items[1] << std::endl;        
         if (items[0] == "'24'"
             && items[1] == " '97C6697351AB'"
-            && items[3] == " 'DS2415'"
-            && items[4] == " CLOCK"
+            && items[3] == " CLOCK"
         ) {
             runtest.pass("formatQuery(onewire_t)");
         } else {

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=e443086acc616dd67c88bcc9ee0445f1e31b2010


commit e443086acc616dd67c88bcc9ee0445f1e31b2010
Author: Rob Savoye <address@hidden>
Date:   Wed Apr 10 21:40:46 2019 -0600

    Add snmp directory for headers

diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index 5e09aad..886b0ac 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -21,8 +21,8 @@
 
 AUTOMAKE_OPTIONS = # dejagnu
 
-pgd_CPPFLAGS = -Wall -I$(top_srcdir)/lib -I$(top_srcdir)/devices
-pgd_CXXFLAGS = $(SYSROOT)
+pgd_CPPFLAGS = -Wall -I$(top_srcdir)/lib -I$(top_srcdir)/devices  
-I$(top_srcdir)/snmp
+pgd_CXXFLAGS = $(SYSROOT) -I$(top_srcdir)/lib -I$(top_srcdir)/devices
 pgd_LDADD = ../devices/libpdev.la ../lib/libpguru.la -lboost_filesystem \
         -lboost_regex -lboost_system -lboost_log -lboost_log_setup \
        -lpthread -lresolv -ldl
@@ -48,13 +48,3 @@ endif
 bin_PROGRAMS = pgd
 
 pgd_SOURCES = main.cc threads.cc
-# pgd_LDFLAGS += -export-dynamic -ldl
-
-# MUDFLAP_OPT = -fmudflap
-# MUDFLAP_LIB =  /usr/local/lib/libmudflap.so
-
-# Rebuild with GCC 4.x Mudflap support
-# mudflap:
-#      @echo "Rebuilding with GCC Mudflap support"
-#      $(MAKE) CXXFLAGS="$(CXXFLAGS) $(MUDFLAP_OPT)" LIBS="$(LIBS) 
$(MUDFLAP_LIB)"
-

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=aee559762fd7ba45d084150d8f1ac915b422b7b3


commit aee559762fd7ba45d084150d8f1ac915b422b7b3
Author: Rob Savoye <address@hidden>
Date:   Wed Apr 10 18:30:18 2019 -0600

    Add moved source files

diff --git a/snmp/Makefile.am b/snmp/Makefile.am
index b5f314e..09c844a 100644
--- a/snmp/Makefile.am
+++ b/snmp/Makefile.am
@@ -20,19 +20,11 @@ AUTOMAKE_OPTIONS =
 noinst_LTLIBRARIES = libpgsnmp.la
 
 libpgsnmp_la_SOURCES = \
-       powerguru.h powerguru.c
+       powerguru.h powerguru.c \
+       snmp.cc snmp.h
 
-#      outback.cc outback.h \
-#      xantrex.cc xantrex.h
-
-#              ifTable.c \
-#              ifTable_data_get.c \
-#              ifTable_interface.c \
-#              ifTable_data_access.c \
-#              ifTable_data_set.c
-
-AM_CPPFLAGS = -I$(srcdir) -I.. $(SNMP_CPPFLAGS)
-libpgsnmp_la_LIBDADD =  $(SNMP_LIBS)
+AM_CPPFLAGS = -I$(srcdir) -I.. $(SNMP_CPPFLAGS) -I$(top_srcdir)/lib
+libpgsnmp_la_LIBDADD = $(SNMP_LIBS)
 
 generate-templates:
        @echo "Generating templates from PowerGuru MIB for Xantrex"
@@ -40,6 +32,7 @@ generate-templates:
        @echo "Generating templates from PowerGuru MIB for Outback"
        @mib2c outback
 
+
 # snmptranslate -M+. -mPOWERGURU-MIB -Tp -IR powerguru
 # mib2c -c mib2c.scalar.conf powerGuru
 # mib2c -c mib2c.column_defines.conf powerGuru

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=8e1b4b70fee1f568037a2ad948d83da4e40e86c5


commit 8e1b4b70fee1f568037a2ad948d83da4e40e86c5
Author: Rob Savoye <address@hidden>
Date:   Wed Apr 10 17:58:46 2019 -0600

    Move source file to better place

diff --git a/lib/snmp.cc b/snmp/snmp.cc
similarity index 94%
rename from lib/snmp.cc
rename to snmp/snmp.cc
index a69c676..de7503c 100644
--- a/lib/snmp.cc
+++ b/snmp/snmp.cc
@@ -1,5 +1,6 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+//               2014, 2015, 2016, 2017, 2018, 2019
 //      Free Software Foundation, Inc.
 // 
 // This program is free software; you can redistribute it and/or modify
@@ -80,7 +81,7 @@ SnmpClient::open(std::string init, std::string mibname)
     
     _pdu = snmp_pdu_create(SNMP_MSG_GET);
     
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 boost::system::error_code
@@ -89,7 +90,7 @@ SnmpClient::close(void)
     snmp_close(_handle);
     BOOST_LOG_SEV(lg, severity_level::warning) << __PRETTY_FUNCTION__
                                                << "ERROR: unimplemented!";
-    errc::make_error_code(errc::not_supported);
+    return errc::make_error_code(errc::not_supported);
 }
 
 struct snmp_pdu *
@@ -196,7 +197,7 @@ SnmpDaemon::master(bool background)
     snmp_shutdown("powerguru");
     SOCK_CLEANUP;
     
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 
 #if 0
@@ -219,7 +220,7 @@ SnmpDaemon::process(void)
         snmp_read(&readfds);
     }
     
-    errc::make_error_code(errc::success);
+    return errc::make_error_code(errc::success);
 }
 #endif
 

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=74fe0327b70884bc90ed20c21ab4caa30fb803e6


commit 74fe0327b70884bc90ed20c21ab4caa30fb803e6
Author: Rob Savoye <address@hidden>
Date:   Wed Apr 10 17:53:30 2019 -0600

    Move header to better place

diff --git a/lib/snmp.h b/snmp/snmp.h
similarity index 95%
rename from lib/snmp.h
rename to snmp/snmp.h
index 4724d1a..e8177c0 100644
--- a/lib/snmp.h
+++ b/snmp/snmp.h
@@ -1,6 +1,7 @@
 // 
-// Copyright (C) 2005, 2006 - 2018
-//      Free Software Foundation, Inc.
+k// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
+// 2014, 2015, 2016, 2017, 2018, 2019 Free Software Foundation, Inc.
+
 // 
 // This program is free software; you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by

http://git.savannah.gnu.org/cgit/powerguru.git/commit/?id=12fb3deac7026733cc0457e8b5ea03249ba82022


commit 12fb3deac7026733cc0457e8b5ea03249ba82022
Author: Rob Savoye <address@hidden>
Date:   Wed Apr 10 16:37:40 2019 -0600

    Don't run doxygen on files not being used.

diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in
index 8b0d0b0..bd8d45f 100644
--- a/doc/Doxyfile.in
+++ b/doc/Doxyfile.in
@@ -52,7 +52,7 @@ EXTRACT_ALL            = YES
 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
 # will be included in the documentation.
 
-EXTRACT_PRIVATE        = NO
+EXTRACT_PRIVATE        = YES
 
 # If the EXTRACT_STATIC tag is set to YES all static members of a file 
 # will be included in the documentation.
@@ -317,7 +317,7 @@ INPUT                  =  @top_srcdir@
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh 
*.hxx *.hpp 
 # *.h++ *.idl *.odl
 
-FILE_PATTERNS          =
+FILE_PATTERNS          = *.cc *.h *.py
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
@@ -329,7 +329,7 @@ RECURSIVE              = YES
 # excluded from the INPUT source files. This way you can easily exclude a 
 # subdirectory from a directory tree whose root is specified with the INPUT 
tag.
 
-EXCLUDE                =
+EXCLUDE                = snmp
 
 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
directories 
 # that are symbolic links (a Unix filesystem feature) are excluded from the 
input.
@@ -472,12 +472,6 @@ HTML_FOOTER            =
 
 HTML_STYLESHEET        = 
 
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
 # If the GENERATE_HTMLHELP tag is set to YES, additional index files 
 # will be generated that can be used as input for tools like the 
 # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
@@ -865,22 +859,6 @@ DOT_PATH               =
 
 DOTFILE_DIRS           = 
 
-# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_WIDTH    = 1024
-
-# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
-# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
-# this value, doxygen will try to truncate the graph, so that it fits within 
-# the specified constraint. Beware that most browsers cannot cope with very 
-# large images.
-
-MAX_DOT_GRAPH_HEIGHT   = 1024
-
 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
 # generate a legend page explaining the meaning of the various boxes and 
 # arrows in the dot generated graphs.
@@ -936,3 +914,37 @@ SEARCHENGINE           = NO
 # the documentation for these projects as well.
 
 #EXT_DOC_PATHS          = 
+
+EXCLUDE                = @top_srcdir@/python/onewire.py \
+                       @top_srcdir@/python/rtlsdr.py \
+                       @top_srcdir@/python/FVN5BEMIL59X8H4.py \
+                       @top_srcdir@/python/gpio433.py \
+                       @top_srcdir@/python/setup.py \
+                       @top_srcdir@/python/weather.py \
+                       @top_srcdir@/python/gpio-ts.py \
+                       @top_srcdir@/devices/outbackpower.cc \
+                       @top_srcdir@/devices/outbackpower.h \
+                       @top_srcdir@/devices/xantrex-trace.cc \
+                       @top_srcdir@/devices/xantrex-trace.h \
+                       @top_srcdir@/devices/xantrex.h \
+                       @top_srcdir@/devices/xanbus.h \
+                       @top_srcdir@/devices/xanbus.cc \
+                       @top_srcdir@/devices/rtl433.cc \
+                       @top_srcdir@/devices/serial.cc \
+                       @top_srcdir@/devices/serial.h \
+                       @top_srcdir@/devices/1wire.cc \
+                       @top_srcdir@/lib/mariadb.cc \
+                       @top_srcdir@/lib/tcpip.cc \
+                       @top_srcdir@/lib/tcpip.h \
+                       @top_srcdir@/lib/tcputil.cc \
+                       @top_srcdir@/lib/tcputil.h \
+                       @top_srcdir@/lib/menuitem.cc \
+                       @top_srcdir@/lib/menuitem.h \
+                       @top_srcdir@/lib/log.cc \
+                       @top_srcdir@/lib/snmp.cc \
+                       @top_srcdir@/lib/snmp.h \
+                       @top_srcdir@/lib/msgs.cc \
+                       @top_srcdir@/lib/msgs.h \
+                       @top_srcdir@/client/outback.cc
+                       
+                       
\ No newline at end of file

-----------------------------------------------------------------------

Summary of changes:
 Makefile.am                    |   9 ++-
 README                         |   9 ++-
 client/cmd.cc                  |   5 +-
 client/threads.cc              |   3 +
 configure.ac                   |   5 ++
 daemon/Makefile.am             |  14 +----
 daemon/main.cc                 |  54 ++++++++---------
 daemon/threads.cc              |   5 +-
 devices/Makefile.am            |   4 +-
 devices/onewire.cc             |   3 +
 devices/onewire.h              |   8 +--
 devices/outbackpower.cc        |   7 ++-
 devices/outbackpower.h         |   7 ++-
 devices/ownet.cc               |  32 ++++++++--
 devices/ownet.h                |   4 ++
 devices/serial.cc              |  25 ++++----
 devices/serial.h               |   3 +
 devices/xanbus.cc              |   7 ++-
 devices/xanbus.h               |   9 ++-
 devices/xantrex-trace.cc       |   7 ++-
 devices/xantrex-trace.h        |   7 ++-
 doc/C/Makefile.am              |   3 +
 doc/C/pgd-man.xml              |   6 +-
 doc/C/powerguru.xml            |   2 +-
 doc/Doxyfile.in                |  70 ++++++++++++++--------
 doc/Makefile.am                |   5 +-
 lib/Makefile.am                |   8 ---
 lib/commands.cc                |  14 ++++-
 lib/commands.h                 |   8 ++-
 lib/console.cc                 |   7 ++-
 lib/console.h                  |   7 ++-
 lib/database.h                 |   2 +
 lib/msgs.cc                    | 131 +++++++++++++++++++++--------------------
 lib/postgresql.cc              |   5 +-
 lib/proc.cc                    |   6 +-
 lib/proc.h                     |   6 +-
 lib/rc.cc                      |  35 +++++++----
 lib/rc.h                       |  20 ++++---
 lib/sharedlib.cc               |  15 ++---
 macros/snmp.m4                 |   8 ---
 powerguru.sql                  |  24 ++++++++
 python/chart.py                |   2 +-
 python/gpio433.py              |   3 +-
 python/gpiots.py               |   1 +
 python/i2c.py                  |   1 +
 python/mergedb.py              |   1 +
 python/onewire.py              |   1 +
 python/options.py              |   1 +
 python/ownet.py                |   1 +
 python/pgd.py                  |   1 +
 python/postgresql.py           |   1 +
 python/remote.py               |   1 +
 python/rtl433.py               |   2 +-
 python/rtlsdr.py               |   1 +
 python/sensor.py               |   1 +
 python/triggers.py             |   1 +
 python/weather.py              |   3 +
 rpm/powerguru.spec             |   2 +-
 rpm/rpm.am                     |   3 +-
 sim/fakeuart.cc                |   7 ++-
 sim/fakeuart.h                 |   6 +-
 sim/osim.cc                    |   8 ++-
 snmp/Makefile.am               |  17 ++----
 snmp/powerguru.c               |  21 +++++++
 snmp/powerguru.h               |   7 ++-
 {lib => snmp}/snmp.cc          |  16 +++--
 {lib => snmp}/snmp.h           |   8 ++-
 testsuite/libtests/cmd-test.cc |   2 +-
 testsuite/libtests/db-test.cc  |   6 +-
 69 files changed, 465 insertions(+), 269 deletions(-)
 rename {lib => snmp}/snmp.cc (92%)
 rename {lib => snmp}/snmp.h (93%)


hooks/post-receive
-- 
powerguru



reply via email to

[Prev in Thread] Current Thread [Next in Thread]