Advertise with Googlier.comdavidc.net
https://www.davidc.net/
enManually 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 +0000davidc85 at https://www.davidc.netHacking 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 +0000davidc83 at https://www.davidc.netKettle 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 +0000davidc82 at https://www.davidc.netKettle 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 +0000davidc81 at https://www.davidc.netKettle 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 +0000davidc80 at https://www.davidc.netKettle 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 +0000davidc78 at https://www.davidc.netPaxton 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 +0000davidc77 at https://www.davidc.netElectromagnetic 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 +0000davidc74 at https://www.davidc.nethttps://www.davidc.net/content/electromagnetic-field-2022-infrastructure-review#commentsAllowing 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 +0000davidc73 at https://www.davidc.netCheck 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 +0000davidc72 at https://www.davidc.net