Advertise with Googlier.com davidc.net https://www.davidc.net/ en Manually flashing a Gen 3 Shelly device https://www.davidc.net/content/manually-flashing-gen-3-shelly-device <span class="field field--name-title field--type-string field--label-hidden">Manually flashing a Gen 3 Shelly device</span> <div class="field field--name-upload field--type-file field--label-hidden field__items"> <div class="field__item"><table data-striping="1"> <thead> <tr> <th>Attachment</th> <th>Size</th> </tr> </thead> <tbody> <tr class="odd"> <td> <span class="file file--mime-text-x-sh file--text"> <a href="https://www.davidc.net/sites/default/files/shelly-fw-downloader.sh.txt" type="text/x-sh">shelly-fw-downloader.sh.txt</a></span> </td> <td>1.56 KB</td> </tr> </tbody> </table> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 17/09/2026 - 16:04</span> Thu, 17 Sep 2026 15:04:32 +0000 davidc 85 at https://www.davidc.net Hacking the Dreo HTF-018S Serial Protocol https://www.davidc.net/content/hacking-dreo-htf-018s-serial-protocol <span class="field field--name-title field--type-string field--label-hidden">Hacking the Dreo HTF-018S Serial Protocol</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 27/06/2026 - 22:14</span> Sat, 27 Jun 2026 21:14:34 +0000 davidc 83 at https://www.davidc.net Kettle Quest: Part 4: The Boiling Point https://www.davidc.net/content/kettle-quest-part-4-boiling-point <span class="field field--name-title field--type-string field--label-hidden">Kettle Quest: Part 4: The Boiling Point</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sat, 07/03/2026 - 23:32</span> Sat, 07 Mar 2026 23:32:48 +0000 davidc 82 at https://www.davidc.net Kettle Quest: Part 3: A New Brain https://www.davidc.net/content/kettle-quest-part-3-new-brain <span class="field field--name-title field--type-string field--label-hidden">Kettle Quest: Part 3: A New Brain</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 06/03/2026 - 19:53</span> Fri, 06 Mar 2026 19:53:33 +0000 davidc 81 at https://www.davidc.net Kettle Quest: Part 2: A Smart Kettle (and how Weekett bricks itself) https://www.davidc.net/content/kettle-quest-part-2-smart-kettle-and-how-weekett-bricks-itself <span class="field field--name-title field--type-string field--label-hidden">Kettle Quest: Part 2: A Smart Kettle (and how Weekett bricks itself)</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 05/03/2026 - 20:36</span> Thu, 05 Mar 2026 20:36:35 +0000 davidc 80 at https://www.davidc.net Kettle Quest: Part 1: The Prologue https://www.davidc.net/content/kettle-quest-part-1-prologue <span class="field field--name-title field--type-string field--label-hidden">Kettle Quest: Part 1: The Prologue</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Wed, 04/03/2026 - 15:55</span> Wed, 04 Mar 2026 15:55:10 +0000 davidc 78 at https://www.davidc.net Paxton RJ45 pinout https://www.davidc.net/miscellany/paxton-rj45-pinout <span class="field field--name-title field--type-string field--label-hidden">Paxton RJ45 pinout</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 14/12/2025 - 21:15</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>I've started working on implementing a controller for Paxton readers. I have a KP50 (Net2 fob reader and PIN pad) and it comes with an RJ45 plug attached. There's no documentation I can find about the pinout, so here's what I've figured out.</p> <style type="text/css"> <!--/*--><![CDATA[/* ><!--*/ <!-- .colour-box { width: 30px; } /* Paxton colours */ .pax-yellow { background-color: yellow; } .pax-blue { background-color: blue; color: white; } .pax-green { background-color: green; color: white; } .pax-orange { background-color: orange; } .pax-brown { background-color: brown; color: white; } .pax-purple { background-color: purple; background: linear-gradient(to right bottom, white 50%, purple 50%); } .pax-purple SPAN { mix-blend-mode: exclusion; } .pax-black { background-color: black; color: white; } .pax-red { background-color: red; } /* T568B colours */ .col-white-orange { background-color: orange; background: linear-gradient(to right bottom, white 50%, orange 50%); } .col-orange { background-color: orange; } .col-white-green { background-color: green; background: linear-gradient(to right bottom, white 50%, green 50%); } .col-green { background-color: green; color: white; } .col-white-blue { background-color: blue; background: linear-gradient(to right bottom, white 50%, blue 50%); } .col-blue { background-color: blue; color: white; } .col-white-brown { background-color: brown; background: linear-gradient(to right bottom, white 50%, brown 50%); } .col-brown { background-color: brown; color: white; } .keypad TD { text-align: center; padding: 5px; background-color: black; color: white; } --> /*--><!]]>*/ </style><p> The colours of the cable in the RJ45 plug are easy to see:</p> <table style="width: auto;"> <thead> <tr> <th>Pin</th> <th colspan="2">Colour</th> </tr> </thead> <tbody> <tr> <td>1</td> <td class="pax-yellow colour-box"></td> <td>Yellow</td> </tr> <tr> <td>2</td> <td class="pax-blue colour-box"></td> <td>Blue</td> </tr> <tr> <td>3</td> <td class="pax-green colour-box"></td> <td>Green</td> </tr> <tr> <td>4</td> <td class="pax-orange colour-box"></td> <td>Orange</td> </tr> <tr> <td>5</td> <td class="pax-brown colour-box"></td> <td>Brown</td> </tr> <tr> <td>6</td> <td class="pax-purple colour-box"></td> <td>Purple (or White)</td> </tr> <tr> <td>7</td> <td class="pax-black colour-box"></td> <td>Black</td> </tr> <tr> <td>8</td> <td class="pax-red colour-box"></td> <td>Red</td> </tr> </tbody> </table> <p>Normally an installer will cut the plug off and wire it directly into the Paxton controller. These have a label identifying which colour goes where, and images are easily found on the Internet, such as <a href="https://www.paxton-access.com/products/net2-plus-1-door-controller/" rel="noreferrer">on Paxton's own site</a>.</p> <p>Putting the two together, we get the full pinout of the Paxton RJ45 connector:</p> <table style="width: auto;"> <thead> <tr> <th>Pin</th> <th colspan="2">Paxton Colour</th> <th colspan="2">T568B Colour</th> <th>Purpose</th> </tr> </thead> <tbody> <tr> <td>1</td> <td class="pax-yellow colour-box"></td> <td>Yellow</td> <td class="col-white-orange colour-box"></td> <td>White/Orange</td> <td>Data</td> </tr> <tr> <td>2</td> <td class="pax-blue colour-box"></td> <td>Blue</td> <td class="col-orange colour-box"></td> <td>Orange</td> <td>Clock</td> </tr> <tr> <td>3</td> <td class="pax-green colour-box"></td> <td>Green</td> <td class="col-white-green colour-box"></td> <td>White/Green</td> <td>Green LED</td> </tr> <tr> <td>4</td> <td class="pax-orange colour-box"></td> <td>Orange</td> <td class="col-blue colour-box"></td> <td>Blue</td> <td>Amber LED</td> </tr> <tr> <td>5</td> <td class="pax-brown colour-box"></td> <td>Brown</td> <td class="col-white-blue colour-box"></td> <td>White/Blue</td> <td>Red LED</td> </tr> <tr> <td>6</td> <td class="pax-purple colour-box"></td> <td>Purple (or White)</td> <td class="col-green colour-box"></td> <td>Green</td> <td>Media detect?</td> </tr> <tr> <td>7</td> <td class="pax-black colour-box"></td> <td>Black</td> <td class="col-white-brown colour-box"></td> <td>White/Brown</td> <td>0V</td> </tr> <tr> <td>8</td> <td class="pax-red colour-box"></td> <td>Red</td> <td class="col-brown colour-box"></td> <td>Brown</td> <td>12V</td> </tr> </tbody> </table> <p>I've put the T568B colours for reference as I used a short length for testing, but it's obviously not a good idea to have clock and data on the same twisted pair over any distance.</p> <h2>Things I've discovered so far</h2> <p>The LED pins should be pulled to 0V to light the LED.</p> <p>The clock and data pins are actually 5V so can feed my logic analyser directly. They default to high (0). Data is available on clock falling edge, high is 0, low is 1. </p> <p>"Media detect" appears to be unconnected on my reader. On some controllers, this pin is labelled as "Media detect", on others it is unlabelled.</p> <p>The keypad beeps on its own when a fob is read or a button is pressed; I can't control this, but I can control the LEDs for feedback. The backlight on the keypad also appears to be fixed.</p> <p>If you add a long-range reader to a reader, according to the documentation it reprograms the original reader to enable long range reading. The pinout gives no clue how this is achieved and I don't have a need for a long-range reader, but possibly the clock and data can be driven from the other end too.</p> <h2>Decoding</h2> <p>I'm using this <a href="https://github.com/en4rab/sigrok-paxton-pd">this sigrok decoder plugin</a> which decodes both fob reads and PIN keypad presses.</p> <p>A Net2 fob read gives [lead in]-b-[card number]-f-[parity]-[lead out]. Apparently a Switch2 fob has extra data and looks like [lead in]-b-[something]-d-[something]-f-[parity]-[lead out].</p> <p>A keypad press gives [lead in]-b-[keypress]-f-[parity]-[lead out], first with the keypress, then a moment later with keypress c99e (key released).</p> <p>The keypresses decode as follows:</p> <table class="keypad" style="width: auto;"> <tbody> <tr> <td>1<br />c00e</td> <td>2<br />c01e</td> <td>3<br />c02e</td> </tr> <tr> <td>4<br />c03e</td> <td>5<br />c04e</td> <td>6<br />c05e</td> </tr> <tr> <td>7<br />c06e</td> <td>8<br />c07e</td> <td>9<br />c08e</td> </tr> <tr> <td>*<br />c10e</td> <td>0<br />c09e</td> <td>#<br />c11e</td> </tr> <tr> <td></td> <td>Bell<br />c15e</td> <td></td> </tr> </tbody> </table> <p>No matter what key is pressed, it is followed by another message with c99e <strike>~70ms later</strike> when the last key is released. If you press and hold a key, that key's message is generated; pressing additional keys while it's held does not generate additional messages. Holding the original key, then holding a different key and releasing the original key does not generate a release message; the c99e is generated only when the last key is released.</p> <p>Here's me pressing the bell button:</p> <p><img src="https://www.davidc.net/sites/default/images/paxton-digit-bell.png" /></p> <p>The protocol is pretty self-explanatory from the decoder's source code and the <a href="https://en4rab.github.io/posts/Paxton-Sigrok/">accompanying references</a>, so building a controller should be fairly easy once the parts arrive. Thanks to en4rab for his work on that.</p> </div> <section class="field field--name-comment-node-page field--type-comment field--label-hidden comment-wrapper"> </section> Sun, 14 Dec 2025 21:15:05 +0000 davidc 77 at https://www.davidc.net Electromagnetic Field 2022 Infrastructure Review https://www.davidc.net/content/electromagnetic-field-2022-infrastructure-review <span class="field field--name-title field--type-string field--label-hidden">Electromagnetic Field 2022 Infrastructure Review</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Sun, 28/08/2022 - 21:16</span> Sun, 28 Aug 2022 20:16:45 +0000 davidc 74 at https://www.davidc.net https://www.davidc.net/content/electromagnetic-field-2022-infrastructure-review#comments Allowing Wordpress updates to actually work via SSH https://www.davidc.net/blog/202009/allowing-wordpress-updates-actually-work-ssh <span class="field field--name-title field--type-string field--label-hidden">Allowing Wordpress updates to actually work via SSH</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 11/09/2020 - 17:25</span> Fri, 11 Sep 2020 16:25:16 +0000 davidc 73 at https://www.davidc.net Check Maildir usage versus quota https://www.davidc.net/miscellany/check-maildir-usage-versus-quota <span class="field field--name-title field--type-string field--label-hidden">Check Maildir usage versus quota</span> <div class="field field--name-upload field--type-file field--label-hidden field__items"> <div class="field__item"><table data-striping="1"> <thead> <tr> <th>Attachment</th> <th>Size</th> </tr> </thead> <tbody> <tr class="odd"> <td> <span class="file file--mime-application-octet-stream file--general"> <a href="https://www.davidc.net/sites/default/files/overquotacheck" type="application/octet-stream" title="overquotacheck">overquotacheck</a></span> </td> <td>4.17 KB</td> </tr> </tbody> </table> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span>davidc</span></span> <span class="field field--name-created field--type-created field--label-hidden">Tue, 30/06/2020 - 17:59</span> Tue, 30 Jun 2020 16:59:23 +0000 davidc 72 at https://www.davidc.net