{"id":8024,"date":"2012-11-05T07:40:28","date_gmt":"2012-11-05T12:40:28","guid":{"rendered":"http:\/\/scruss.com\/blog\/?p=8024"},"modified":"2012-11-05T07:40:28","modified_gmt":"2012-11-05T12:40:28","slug":"power-cost-monitor-signals-for-reals","status":"publish","type":"post","link":"https:\/\/scruss.com\/blog\/2012\/11\/05\/power-cost-monitor-signals-for-reals\/","title":{"rendered":"Power Cost Monitor signals \u00e2\u20ac\u201d for reals!"},"content":{"rendered":"<p>After doing almost nothing with the Arduino and the <a href=\"http:\/\/scruss.com\/blog\/2011\/02\/21\/on-the-trail-of-the-elusive-power-cost-monitor-signal\/\">elusive Power Cost Monitor signal<\/a>, I&#8217;m finally getting <em>something<\/em> from it. Matt Colyer&#8217;s <a href=\"http:\/\/matt.colyer.name\/projects\/power-meter\/\">Power Monitor<\/a> sketch does all the heavy lifting, for he managed to reverse engineer the protocol. His solution is a rather complex one, involving ethernet shields and Ruby. All I wanted was a simple serial logger, so I cut down Matt&#8217;s code, and modified the network output to simple print statements:<\/p>\n<pre>== Waiting (38464857ms, 1676 bytes) ==\r\n== Sending (38467858ms, 1668 bytes) ==\r\nsample[data]=0000000a\r\nsample[data]=0000015a\r\n== Waiting (38467863ms, 1676 bytes) ==\r\n== Received (38592156ms, 1670 bytes) ==\r\n== Waiting (38592157ms, 1676 bytes) ==\r\n== Sending (38595158ms, 1668 bytes) ==\r\nsample[data]=00000000\r\n== Waiting (38595159ms, 1676 bytes) ==\r\n== Received (38624334ms, 1670 bytes) ==\r\n== Waiting (38624335ms, 1676 bytes) ==\r\n== Sending (38627336ms, 1668 bytes) ==\r\nsample[data]=ffffe746\r\n== Waiting (38627337ms, 1676 bytes) ==\r\n== Received (38688007ms, 1670 bytes) ==\r\n== Waiting (38688009ms, 1676 bytes) ==\r\n== Received (38688045ms, 1670 bytes) ==\r\n== Waiting (38688046ms, 1676 bytes) ==\r\n== Sending (38691047ms, 1668 bytes) ==\r\nsample[data]=00001748\r\nsample[data]=00000008\r\n== Waiting (38691052ms, 1676 bytes) ==\r\n== Received (38720026ms, 1670 bytes) ==\r\n== Waiting (38720027ms, 1676 bytes) ==\r\n== Sending (38723028ms, 1668 bytes) ==\r\nsample[data]=00000000\r\n== Waiting (38723030ms, 1676 bytes) ==\r\n== Received (38783686ms, 1670 bytes) ==\r\n== Waiting (38783687ms, 1676 bytes) ==\r\n== Sending (38786688ms, 1668 bytes) ==\r\nsample[data]=00000011\r\n== Waiting (38786689ms, 1676 bytes) ==\r\n== Received (38815636ms, 1670 bytes) ==\r\n== Waiting (38815637ms, 1676 bytes) ==\r\n== Sending (38818638ms, 1668 bytes) ==\r\nsample[data]=fffff322\r\n== Waiting (38818639ms, 1676 bytes) ==\r\n== Received (38847547ms, 1670 bytes) ==\r\n== Waiting (38847548ms, 1676 bytes) ==\r\n== Sending (38850549ms, 1668 bytes) ==\r\nsample[data]=00000001\r\n== Waiting (38850550ms, 1676 bytes) ==\r\n== Received (38879444ms, 1670 bytes) ==\r\n== Waiting (38879446ms, 1676 bytes) ==\r\n== Sending (38882445ms, 1668 bytes) ==\r\nsample[data]=0000374f\r\n== Waiting (38882446ms, 1676 bytes) ==\r\n== Received (38911210ms, 1670 bytes) ==\r\n== Waiting (38911211ms, 1676 bytes) ==\r\n== Sending (38914212ms, 1668 bytes) ==\r\nsample[data]=00000043\r\n== Waiting (38914213ms, 1676 bytes) ==\r\n== Received (39006981ms, 1670 bytes) ==\r\n== Waiting (39006982ms, 1676 bytes) ==\r\n== Sending (39009982ms, 1668 bytes) ==\r\nsample[data]=00000000\r\n== Waiting (39009983ms, 1676 bytes) ==\r\n== Received (39038895ms, 1670 bytes) ==\r\n== Waiting (39038896ms, 1676 bytes) ==\r\n== Sending (39041897ms, 1668 bytes) ==\r\nsample[data]=00000001\r\n== Waiting (39041898ms, 1676 bytes) ==\r\n== Received (39102999ms, 1670 bytes) ==\r\n== Waiting (39103000ms, 1676 bytes) ==\r\n== Sending (39106001ms, 1668 bytes) ==\r\nsample[data]=00000000\r\n== Waiting (39106002ms, 1676 bytes) ==\r\n== Received (39134880ms, 1670 bytes) ==\r\n== Waiting (39134881ms, 1676 bytes) ==\r\n== Sending (39137882ms, 1668 bytes) ==\r\nsample[data]=00000001\r\n== Waiting (39137883ms, 1676 bytes) ==<\/pre>\n<p>Now it&#8217;s just a small matter of programming to work out what Matt&#8217;s Ruby code does. Ruby always looks to me like two programmers started coding at different ends of the same line, and collided in the middle. I&#8217;m hoping there&#8217;s enough processing power in the Arduino to do the conversion in the chip, and output useful log data as a serial stream.<\/p>\n<p>More later &#8230;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>After doing almost nothing with the Arduino and the elusive Power Cost Monitor signal, I&#8217;m finally getting something from it. Matt Colyer&#8217;s Power Monitor sketch does all the heavy lifting, for he managed to reverse engineer the protocol. His solution is a rather complex one, involving ethernet shields and Ruby. All I wanted was a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[2207,2583,959,276],"class_list":["post-8024","post","type-post","status-publish","format-standard","hentry","category-computers-suck","tag-arduino","tag-aw_yiss","tag-smart_meter","tag-wireless"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pQNZZ-25q","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/8024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/comments?post=8024"}],"version-history":[{"count":2,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/8024\/revisions"}],"predecessor-version":[{"id":8026,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/8024\/revisions\/8026"}],"wp:attachment":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/media?parent=8024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/categories?post=8024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/tags?post=8024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}