<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.antitronics.com/wiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.antitronics.com/wiki/index.php?title=PowerMonitor&amp;feed=atom&amp;action=history</id>
		<title>PowerMonitor - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.antitronics.com/wiki/index.php?title=PowerMonitor&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://www.antitronics.com/wiki/index.php?title=PowerMonitor&amp;action=history"/>
		<updated>2013-05-19T17:30:51Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.16.4</generator>

	<entry>
		<id>http://www.antitronics.com/wiki/index.php?title=PowerMonitor&amp;diff=120&amp;oldid=prev</id>
		<title>Sconklin: New page: = Networked power monitoring device =  This project is a power monitoring device that monitors the current in three conductors and sends the data to a web server for loggin and processing....</title>
		<link rel="alternate" type="text/html" href="http://www.antitronics.com/wiki/index.php?title=PowerMonitor&amp;diff=120&amp;oldid=prev"/>
				<updated>2009-11-02T02:25:19Z</updated>
		
		<summary type="html">&lt;p&gt;New page: = Networked power monitoring device =  This project is a power monitoring device that monitors the current in three conductors and sends the data to a web server for loggin and processing....&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Networked power monitoring device =&lt;br /&gt;
&lt;br /&gt;
This project is a power monitoring device that monitors the current in three conductors and sends the data to a web server for loggin and processing.&lt;br /&gt;
&lt;br /&gt;
The current is monitored using three (model number here) Fluke clamp-on current probes. These probes output 1mA of current for each Amp of monitored&lt;br /&gt;
current, with a maximum capacity of 400A.&lt;br /&gt;
&lt;br /&gt;
The probe signals are conditioned by a circuit (details here)&lt;br /&gt;
&lt;br /&gt;
The output of the conditioning circuit is connected to three analog input pins on an Arduino Duemilanove board. An Adafruit ethernet shield is connected&lt;br /&gt;
to the Arduino, with an XPort module installed.&lt;br /&gt;
&lt;br /&gt;
There are two pieces of software used. One is the Arduino sketch, which runs on the monitoring device. The other is a php script which runs on a web server to accept the data over the network from the device, and to log it.&lt;br /&gt;
&lt;br /&gt;
Here is the Arduino sketch used:&lt;br /&gt;
&lt;br /&gt;
 // Copyright 2009 by Steve Conklin http://www.antitronics.com&lt;br /&gt;
 // released to the public domain&lt;br /&gt;
 //&lt;br /&gt;
 // derived from some code and ideas by Maurice Ribble:&lt;br /&gt;
 // http://www.glacialwanderer.com/hobbyrobotics&lt;br /&gt;
 // http://www.glacialwanderer.com/hobbyrobotics/?cat=5&amp;amp;paged=2&lt;br /&gt;
 &lt;br /&gt;
 // This sketch sends the values from the first three analog inputs to a web server&lt;br /&gt;
 // for logging. It uses the adafruit ethernet shield with an XPort module installed.&lt;br /&gt;
 // The XPORT connections and configuration are *almost* the same as documented on the adafruit&lt;br /&gt;
 // web site: http://www.ladyada.net/make/eshield/index.html&lt;br /&gt;
 //&lt;br /&gt;
 // You must install the AF_XPort and NewSoftSerial libraries - see ladyada's site for links to them&lt;br /&gt;
 //&lt;br /&gt;
 // XPort connections on the eshield:&lt;br /&gt;
 //&lt;br /&gt;
 // XPort RX pin -&amp;gt; Arduino digital pin 2&lt;br /&gt;
 // XPort TX pin -&amp;gt; Arduino digital pin 3&lt;br /&gt;
 // XPort Reset pin -&amp;gt; Arduino digital pin 4&lt;br /&gt;
 // XPort DTR pin -&amp;gt; Arduino digital pin 5 (not used)&lt;br /&gt;
 // XPort CTS pin -&amp;gt; Arduino digital pin 6&lt;br /&gt;
 // XPort RTS pin -&amp;gt; Arduino digital pin 7 (not used)&lt;br /&gt;
 //&lt;br /&gt;
 // XPort configuration:&lt;br /&gt;
 //&lt;br /&gt;
 // *** Channel 1&lt;br /&gt;
 // Baudrate 57600, I/F Mode 4C, Flow 02&lt;br /&gt;
 // Port 10001&lt;br /&gt;
 // Connect Mode : D4&lt;br /&gt;
 // Send '+++' in Modem Mode enabled&lt;br /&gt;
 // Show IP addr after 'RING' enabled&lt;br /&gt;
 // Auto increment source port disabled&lt;br /&gt;
 // Remote IP Adr: --- none ---, Port 00000&lt;br /&gt;
 // Disconn Mode : 80  Disconn Time: 00:03 &amp;lt;=== Different than adafruit example, she uses Disconn Mode = 0&lt;br /&gt;
 // Flush   Mode : 77&lt;br /&gt;
 &lt;br /&gt;
 // These are web server specific values&lt;br /&gt;
 #define PHP_PAGE_LOCATION &amp;quot;/monitor/power.php&amp;quot;&lt;br /&gt;
 #define WEB_HOST &amp;quot;HOST: mydomainname.com\n\n&amp;quot;&lt;br /&gt;
 #define CONN_IP &amp;quot;172.130.0.003&amp;quot;&lt;br /&gt;
 #define CONN_PORT 80&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;AF_XPort.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;NewSoftSerial.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // the xport!&lt;br /&gt;
 #define XPORT_RX        2&lt;br /&gt;
 #define XPORT_TX        3&lt;br /&gt;
 #define XPORT_RESET     4&lt;br /&gt;
 #define XPORT_CTS       6&lt;br /&gt;
 #define XPORT_RTS       0 // not used&lt;br /&gt;
 #define XPORT_DTR       0 // not used&lt;br /&gt;
 AF_XPort xport = AF_XPort(XPORT_RX, XPORT_TX, XPORT_RESET, XPORT_DTR, XPORT_RTS, XPORT_CTS);&lt;br /&gt;
 &lt;br /&gt;
 char linebuffer[128];&lt;br /&gt;
 int retstat;&lt;br /&gt;
 &lt;br /&gt;
 void printstatus(int)&lt;br /&gt;
 {&lt;br /&gt;
   // no output for success&lt;br /&gt;
   if (retstat == ERROR_TIMEDOUT)&lt;br /&gt;
     Serial.println(&amp;quot;ERROR: Timeout&amp;quot;);&lt;br /&gt;
   else if (retstat == ERROR_BADRESP)&lt;br /&gt;
     Serial.println(&amp;quot;ERROR: Bad Response&amp;quot;);&lt;br /&gt;
   else if (retstat == ERROR_DISCONN)&lt;br /&gt;
     Serial.println(&amp;quot;ERROR: Disconnect&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   return;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   Serial.begin(57600);&lt;br /&gt;
   Serial.println(&amp;quot;serial port ready&amp;quot;);&lt;br /&gt;
   xport.begin(57600);&lt;br /&gt;
   retstat = xport.reset();&lt;br /&gt;
   printstatus(retstat);&lt;br /&gt;
   Serial.println(&amp;quot;XPort ready&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   int value0, value1, value2;&lt;br /&gt;
   uint8_t read;&lt;br /&gt;
   char cbuffer[128];&lt;br /&gt;
 &lt;br /&gt;
   //Serial.println(&amp;quot;Connecting&amp;quot;);&lt;br /&gt;
   retstat = xport.connect(CONN_IP, CONN_PORT);&lt;br /&gt;
   printstatus(retstat);&lt;br /&gt;
   //Serial.println(&amp;quot;Sending GET&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   //Serial.println(&amp;quot;Request&amp;quot;);&lt;br /&gt;
   value0 = analogRead(0);&lt;br /&gt;
   value1 = analogRead(1);&lt;br /&gt;
   value2 = analogRead(2);&lt;br /&gt;
 &lt;br /&gt;
   sprintf(cbuffer, &amp;quot;GET %s?value0=%d&amp;amp;value1=%d&amp;amp;value2=%d HTTP/1.1\n%s&amp;quot;, PHP_PAGE_LOCATION,value0,value1,value2,WEB_HOST);&lt;br /&gt;
   Serial.println(cbuffer);&lt;br /&gt;
   xport.print(cbuffer);&lt;br /&gt;
 &lt;br /&gt;
   // read back the status from the web host&lt;br /&gt;
   read = xport.readline_timeout(linebuffer, 128, 1000);&lt;br /&gt;
   //Serial.println(read, DEC);   // debugging output&lt;br /&gt;
   //Serial.print(linebuffer); // debugging output&lt;br /&gt;
 &lt;br /&gt;
   //Serial.println(&amp;quot;sent - sleeping&amp;quot;);&lt;br /&gt;
   // Delay for 1 minute&lt;br /&gt;
   delay(60000);&lt;br /&gt;
   // The disconnect notification 'D' character probably arrived during this interval&lt;br /&gt;
   // so flush it so we don't read it after our next connect attempt&lt;br /&gt;
   xport.flush(255);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Here is the php script from the server:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 // Setup variables&lt;br /&gt;
 $value0 = $_GET['value0'];&lt;br /&gt;
 $value1 = $_GET['value1'];&lt;br /&gt;
 $value2 = $_GET['value2'];&lt;br /&gt;
 &lt;br /&gt;
 // This code by Maurice Ribble:&lt;br /&gt;
 // http://www.glacialwanderer.com/hobbyrobotics&lt;br /&gt;
 // http://www.glacialwanderer.com/hobbyrobotics/?cat=5&amp;amp;paged=2&lt;br /&gt;
 &lt;br /&gt;
 // if you are testing or your value is never actually zero, turn this on&lt;br /&gt;
 //if (!$value0 || !$value1 || !value2)&lt;br /&gt;
 //{&lt;br /&gt;
 //  echo &amp;quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
 //&lt;br /&gt;
 //You need to pass in valid _GET parameters.  Script Terminated.&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;;&lt;br /&gt;
 //  exit;&lt;br /&gt;
 //}&lt;br /&gt;
 &lt;br /&gt;
 $fp = fopen(&amp;quot;/path/to/websiteroot/monitor/powerlog.txt&amp;quot;, 'at');&lt;br /&gt;
 if (!$fp)&lt;br /&gt;
 {&lt;br /&gt;
 	echo '&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Failed to open file&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;';&lt;br /&gt;
 	exit;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $tstamp = date(&amp;quot;m/d/Y G:i:s&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 $outputstring = &amp;quot;$tstamp $value0 $value1 $value2\r\n&amp;quot;;&lt;br /&gt;
 fwrite($fp, $outputstring, strlen($outputstring));&lt;br /&gt;
 // end with a 0 to close the session to the client:&lt;br /&gt;
 echo &amp;quot;\0&amp;quot;;&lt;br /&gt;
 end;&lt;br /&gt;
 ?&amp;gt;&lt;/div&gt;</summary>
		<author><name>Sconklin</name></author>	</entry>

	</feed>