{"id":10186,"date":"2013-12-03T22:35:18","date_gmt":"2013-12-04T03:35:18","guid":{"rendered":"http:\/\/scruss.com\/blog\/?p=10186"},"modified":"2015-12-12T14:50:21","modified_gmt":"2015-12-12T19:50:21","slug":"blueline-black-decker-power-monitor-rf-packets","status":"publish","type":"post","link":"https:\/\/scruss.com\/blog\/2013\/12\/03\/blueline-black-decker-power-monitor-rf-packets\/","title":{"rendered":"Blueline \/ Black &#038; Decker Power Monitor RF Packets"},"content":{"rendered":"<p><strong><em>Update 2014-10-02<\/em>: I&#8217;ve forked Bryan&#8217;s Arduino code and added some instructions: <a href=\"https:\/\/github.com\/scruss\/Powermon433\">scruss\/Powermon433 (though use Bryan&#8217;s, srsly)<\/a><\/strong><\/p>\n<p><strong><em>Update 2014-08-19<\/em>: Bryan Mayland has decoded the data on Arduino! More details here: <a href=\"https:\/\/github.com\/CapnBry\/Powermon433\">CapnBry\/Powermon433<\/a><\/strong><\/p>\n<p>Given that I first started thinking about reverse-engineering the <a href=\"http:\/\/www.bluelineinnovations.com\/Products\/\">Blueline Powercost Monitor<\/a>&#8216;s data stream in <a href=\"http:\/\/scruss.com\/blog\/2010\/09\/17\/my-little-nerd-whiskers-are-quivering\/\">September 2010<\/a>, I hardly win any awards for rapid development. Here&#8217;s what I know so far about the device and its transmissions:<\/p>\n<ul>\n<li>The Blueline unit and the (now discontinued)\u00c2\u00a0<a href=\"http:\/\/www.blackanddecker.com\/\">Black &amp; Decker<\/a> Power Monitor (EM100B) appear to be functionally identical. Both transmit data using simple <abbr title=\"Amplitude Shift Keying\">ASK<\/abbr>\/<abbr title=\"On\/Off Keying\">OOK<\/abbr> at 433.92 MHz in the ISM band.<\/li>\n<li>It is, however, completely different from the <a href=\"http:\/\/blog.bitheap.net\/p\/this-is-overview-of-data-norge-nge101.html\">Norgo NGE101<\/a> meter, dammit.<\/li>\n<li>The display unit is made by <a href=\"http:\/\/www.hidekielectronics.com\/\">Hideki Electronic Limited<\/a>, who make many small weather stations and wireless displays. [<a href=\"https:\/\/secure.flickr.com\/photos\/scruss\/sets\/72157637083523295\/with\/10589794126\/\">Pictures of the display circuit boards<\/a>]<br \/>\n<a href=\"http:\/\/www.flickr.com\/photos\/scruss\/9507267522\/\"><img loading=\"lazy\" decoding=\"async\" title=\"Inside a Black &amp; Decker Power Meter\" src=\"http:\/\/farm8.staticflickr.com\/7417\/9507267522_f6871c9aa4_n.jpg\" alt=\"Inside a Black &amp; Decker Power Meter\" width=\"240\" height=\"320\" \/><\/a><\/li>\n<li>The transmitter unit was designed by Intectus in Ottawa for Blueline. It uses a TI MSP430 \u00c2\u00b5controller. [<a href=\"https:\/\/secure.flickr.com\/photos\/scruss\/10700944404\/in\/set-72157637083523295\">Transmitter board picture<\/a>]<br \/>\n<a href=\"http:\/\/www.flickr.com\/photos\/scruss\/10700944404\/\"><img loading=\"lazy\" decoding=\"async\" title=\"Black &amp; Decker Power Monitor: Meter Transmitter board\" src=\"http:\/\/farm8.staticflickr.com\/7301\/10700944404_499e5e104a.jpg\" alt=\"Black &amp; Decker Power Monitor: Meter Transmitter board\" width=\"500\" height=\"277\" \/><\/a><\/li>\n<li>The transmitter can be triggered by simulating a power meter if you flash a 940 nm IR Emitter LED for <a href=\"http:\/\/openenergymonitor.org\/emon\/buildingblocks\/introduction-to-pulse-counting\">50 ms<\/a> into its sensor. 1\u00c3\u2014 50 ms flash represents 1 Wh of power consumed. A pulse frequency of 1 Hz represents 3.6 kW consumption.<br \/>\n<a href=\"http:\/\/www.flickr.com\/photos\/scruss\/11199208105\/\"><img loading=\"lazy\" decoding=\"async\" title=\"Arduino-based domestic power meter simulator\" src=\"http:\/\/farm4.staticflickr.com\/3812\/11199208105_ce1b6c3244.jpg\" alt=\"Arduino-based domestic power meter simulator\" width=\"375\" height=\"500\" \/><\/a><\/li>\n<li>The transmitter sends a bundle of three (seemingly) identical packets every 31.8 seconds. These appear to contain consumption data, as the display updates approximately every 32 seconds.<br \/>\n<a href=\"http:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-10191\" src=\"http:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot-320x193.png\" alt=\"a data packet bundle\" width=\"320\" height=\"193\" srcset=\"https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot-320x193.png 320w, https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot-160x96.png 160w, https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot-1024x618.png 1024w, https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/2013-12-03-211002_1268x766_scrot.png 1268w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/li>\n<li>A series of contiguous packets, recorded as audio using a simple circuit described by the <a href=\"http:\/\/wiki.nethome.nu\/doku.php\/analyzer\/hardware\">Protocol Analyzer<\/a> project: <a href=\"http:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/audio201311182215-silenced.flac\">audio201311182215-silenced<\/a> (FLAC; please note that interstitial silences have been blanked to reduce file size).<\/li>\n<li>Temperature packets may be sent separately from power, as the display updates temperature much more slowly than power use.<\/li>\n<li>Power packets only appear to contain use data (along with a transmitter ID). If the sensor receives an absolutely constant input, the packets transmitted 32 s apart can be identical.<br \/>\n<a href=\"http:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/powermeter-203453vs203525.pdf\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-10195\" src=\"http:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/powermeter-203453vs203525.jpg\" alt=\"powermeter-203453vs203525\" width=\"600\" height=\"420\" srcset=\"https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/powermeter-203453vs203525.jpg 600w, https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/powermeter-203453vs203525-160x112.jpg 160w, https:\/\/scruss.com\/wordpress\/wp-content\/uploads\/2013\/12\/powermeter-203453vs203525-320x224.jpg 320w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/li>\n<li>The packets appear to be <a href=\"http:\/\/www.atmel.com\/Images\/doc9164.pdf\">Manchester<\/a>-encoded.<\/li>\n<\/ul>\n<p>Some rough notes on mark\/space timing (all times in \u00c2\u00b5s):<\/p>\n<pre>Mark : Mean\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 529.4 Min\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 499.0 Max\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 590.0 StdDev:\u00c2\u00a0\u00c2\u00a0 15.03 \r\nSpace: Mean\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 694.5 Min\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 385.0 Max\u00c2\u00a0\u00c2\u00a0 1474.0 StdDev:\u00c2\u00a0 281.57<\/pre>\n<p>Mark\/space times, by frequency (all times in \u00c2\u00b5s):<\/p>\n<pre>MARK\r\n====\r\n\r\n          \u00c2\u00b5S\r\nRank\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 Value\u00c2\u00a0\u00c2\u00a0 Count\r\n-------- ------- -----\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 522\u00c2\u00a0 498\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 2\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 544\u00c2\u00a0 206\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 3\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 567\u00c2\u00a0\u00c2\u00a0 32\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 4\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 499\u00c2\u00a0\u00c2\u00a0 32\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 5\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 590\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 8\r\n\r\nSPACE\r\n=====\r\n\r\n          \u00c2\u00b5S\r\nRank\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 Value\u00c2\u00a0\u00c2\u00a0 Count\r\n-------- ------- -----\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 476\u00c2\u00a0 279\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 2\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 975\u00c2\u00a0 223\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 3\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 454\u00c2\u00a0\u00c2\u00a0 99\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 4\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 952\u00c2\u00a0\u00c2\u00a0 65\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 5\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 431\u00c2\u00a0\u00c2\u00a0 26\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 6\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1474\u00c2\u00a0\u00c2\u00a0 22\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 7\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 408\u00c2\u00a0\u00c2\u00a0 21\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 8\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 499\u00c2\u00a0\u00c2\u00a0 17\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 9\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 998\u00c2\u00a0\u00c2\u00a0 12\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 10\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0 199000\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 8\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 11\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 385\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 2\r\n\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 12\u00c2\u00a0\u00c2\u00a0 \u00c2\u00a0\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 1451\u00c2\u00a0\u00c2\u00a0\u00c2\u00a0 2<\/pre>\n<p>More later, including raw packet data.<\/p>\n<p>Thanks to <a href=\"http:\/\/randysimons.nl\/\">Randy Simons<\/a> and <a href=\"http:\/\/capnbry.net\/blog\/\">Bryan Mayland<\/a> for the recent help. Thanks too to Brett \u00e2\u20ac\u0153<a href=\"http:\/\/www.roguerobotics.com\/\">Wiring<\/a>\u00e2\u20ac\u009d Hagman for asking just <em>why<\/em> I was trying to do this \u00e2\u20ac\u00a6<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update 2014-10-02: I&#8217;ve forked Bryan&#8217;s Arduino code and added some instructions: scruss\/Powermon433 (though use Bryan&#8217;s, srsly) Update 2014-08-19: Bryan Mayland has decoded the data on Arduino! More details here: CapnBry\/Powermon433 Given that I first started thinking about reverse-engineering the Blueline Powercost Monitor&#8216;s data stream in September 2010, I hardly win any awards for rapid development. [&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":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[2207,2750,2835,2836,959],"class_list":["post-10186","post","type-post","status-publish","format-standard","hentry","category-computers-suck","tag-arduino","tag-blueline","tag-powercost","tag-rf","tag-smart_meter"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pQNZZ-2Ei","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/10186","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=10186"}],"version-history":[{"count":7,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/10186\/revisions"}],"predecessor-version":[{"id":12523,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/posts\/10186\/revisions\/12523"}],"wp:attachment":[{"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/media?parent=10186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/categories?post=10186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scruss.com\/blog\/wp-json\/wp\/v2\/tags?post=10186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}