2025-06-02

IR LED controllers

I ordered a couple of LED controller remotes.

Now to work out how they work.

The first (big one) is simple 32 bit NEC coded (i.e. address, inverted address, code, inverted code) with address 00. Laid out as follows for the code:-

5C 5D 41 40

58 59 45 44

54 55 49 48

50 51 4D 4C

1C 1D 1E 1F

18 19 1A 1B

14 15 16 17

10 11 12 13

0C 0D 0E 0F

08 09 0A 0B

04 05 06 07

As you see, this has some pattern to it, but why not literally a proper grid or sequence, why this. But OK, I can cope. I plan to make my LED controller boards have IR receivers and understand this in some sane way - with extra keys like DIY1 do device automation to Home Assistant.

But what of the smaller one?

Well this is special, it is 32 bits, just like an NEC remote, but the first bytes are 00 EF not address and inverted address. I mean, it is distinctive, and consistent on all keys, but not quite standard. The code is still code and inverted code though. The codes are then:

00 01 02 03

04 05 06 07

08 09 0A 0B

0C 0D 0E 0F

10 11 12 13

14 15 16 17

This is way more logical key codes.

Simpler

For completeness, this is a nice simple IR from Amazon.

Which is address 00 and codes:

45 46 47

44 40 43

07 15 09

16 19 0D

   18

08 1C 5A

   52

Which, as you can see, is all over the place! 

2025-06-01

Infra-red remote conrols

I have done a lot of stuff over the years, and the "old" tech, like barcodes, and modems, faxes, and all sorts have not passed me by, even old school "light pen" on a BBC micro.

But somehow one "old" tech passed me by somehow, and I am not sure how - the IR Remote.

They are a lot like barcodes, but without the variable timings. They are simple, and why the hell, in the last 50 years, have I never played with IR remotes? Mad.

So I have started.

This is my environmental board, and apart from light, sound, pressure, temp, humidity and CO₂ sensors, it has an IR receiver. So I had a play.

The ESP32 has built in IR receiver (RMT) hardware that logs timings for the on/off from the IR receiver modules (which handles the 38kHz modulation for me).

It is a doddle to decode - actually way easier than barcodes. So I have decoded the very common NEC format, and the remote for the Daikin air-con.

NEC

The NEC coding is simple - a long/short header, and then pulse distance coding of 32 bits. It is 4 bytes (and annoyingly low bit first) which are address, and inverted address, and code, and inverted code, making a checked 16 bit sequence of fixed time duration.

This seems to cover a variety of bog standards remotes, like TV remotes. Interestingly my LG TV remote only does IR when the TV is off. Once on, it uses something else (not sure if bluetooth or what). It uses address 04.

I also have a very generic IR remote from Amazon, which is address code 00, and several (very illogically mapped) codes.

A single bit code 0, with a different timing header burst, is repeated whilst the button is pressed. Easy to decode press, hold, release.

Daikin

The Daikin remote is more complex, some 8 byte sequences, and a 19 bytes sequence, sent every time, using a simple byte checksum code at the end. Again, pulse distance coding. But again not hard to decode.

More

I have some more IR remotes coming to play with. So we'll see how they work.

2025-05-22

Evolution of my code and PCBs

One the last few weeks my code and PCB designs have evolved a bit!

EPD

This is still called EPD (E-Paper Display), but in practice it is now a general purpose signage system allowing a number of widgets to be displayed getting data from many sources. Making it work with the 2" and 2.4" waveshare LCDs was nice. I got my PNG code doing colour nicely for this, and alpha blending.

One aspect I was very pleased about was the display connection - the display has 8 pads/holes at 0.1" spacing for a normal 0.1" header pin strip. Making a board to work with this is easy and you solder top and bottom - done! But it makes it almost impossible to remove cleanly if ever needed.


The trick is a surface mount header on my board, on top of pads/holes to allow for longer pins. This then allows 0.1" header pins on the display that then just plug in. It can be unplugged simply if access needed for connectors, or if changing display/board at any point. 

But the code has evolved even more - allowing a wide number of sensors (I2C and one-wire-bus), and formatting specially for temperatures (small C/F, colour based on range), etc. And now even BLE based temperature and humidity sensors as well.

In fact, with all of the sensors reporting to Home Assistant, I have had to make a "non display" version of the code for someone that is using this with no display - which is crazy for code designed to display stuff.

I also added handing of buttons as the board (see below) has them, causing Home Assistant triggers.

Faikin Remote

This other code has worked very much in parallel with a lot in common - including adding a load of sensors, the same as EPD. The main use case is to work a Faikin.

However the PCB design for this has ended up being a key module for use with my EPD code. It too has changed.

The initial sensors were temperature (as main thing for Faikin remote), humidity, and CO₂. The module is designed to also work a fan and radiator based - fan based on humidity and CO₂, and radiator based on temperature for cases where you have air-con and radiator. But it works for rooms I have that only have radiator, obviously. So it is an environmental monitor (working with HA) and a remote for the Faikin.

It also has pressure, so the CO₂ can be calibrated, and a light sensor so it can go off when dark (ideal for a bedroom).

But it is growing, with my latest designs (not yet on sale) having a microphone for noise level, and also an IR remote receiver. The idea of the IR is that a Daikin remote could work this directly. I'll need to code these soon.

It is becoming a really comprehensive environmental monitoring board now.

I was also asked to make the snap off bits (button, CO₂, and now IR) have pads to allow them to be wired in, so that is done - you can remove and mount nearby and wire back to the board.

Practical uses

Obviously I have these working with Faikin modules, and have them working with radiators (with and without air-con), and in places just monitoring. Some customers have them around offices to monitor workspace environmental conditions.

One good use case with remote BLE sensors is the pub. Showing BLE sensors in various places, and the DS18B20 temperature probe from another of the boards in the cellar monitoring the beer cooler. The fact this is all visible from the bar now makes life easier, and highlights any out of temperature readings (like when someone opened the beer keg store room to put in a sensor).

What is ideal is this is all reported and logged and graphed on Home Assistant as well. Any issues with the beer/lager the bar staff can see if there is an issue with the cooler at a glance (as had happened a couple of times). We also have logs and graphs which helps when the engineer comes in to sort the cooler.

Next step is probably one monitoring all the fridges. I found these small BLE sensors manage to work inside a metal fridge, if you are close enough. They will still do their temp checks, but this will alert quickly in one place if any issues, and provide historical records nicely. Obviously we check these with a calibrated thermometer as well.

All I need to do now is find a source of the BLE sensors that still work and can be flashed with Telink Flasher. Any pointers welcome.

Tindie

Yes, the code and PCB design is all open source, and I have these on Tindie. I do a tad cheaper for collection from Aber if you are local. Check it out as there is quite a lot on there now.

2025-05-19

Finding customers

I have the Tindie store set up now. But no good way to promote as yet. My problem is I generally hate the whole advertising industry (as a consumer). This leaves me a tad stuck on how to make people that actually want the products even know they exist. Of course, being that selective (a) avoids annoying people that do not want this, and (b) is highly targeted adverts which I, and others, hate even more, arrrg! You can't win.

A blog post like this will help, I am sure, but even this feels wrong, it is an advert on my blog, which is not that fair really - you did not come here for adverts, did you?

What is fun is I have a few customers (they are actually local, so collect, and do not buy on Tindie, so cheaper), but they sort of self identify as addicts of my tech. I really appreciate their business and feedback and suggestions. I just wish I could find a few more addicts :-)

So I'm interested in the most ethical ways to promote these products - suggestions welcome.

2025-05-17

Scammer energy calls

So a friend got a call when I was around and so overheard I heard much of it (she was quite happy that I did), and then hopefully I have reassured her that it was indeed a scam.

But it is hard work.

They somehow claimed to be from her energy company, now I did not hear the start exactly, i.e. if she gave away the name of the company or they knew/guessed.

The gist of the call was simple, they were supposedly over due paying, and would be cut off tomorrow (Sunday). The caller claimed they had stopped a direct debit, and were now £6000 in arrears, which had to be paid.

Now my friend was not totally stupid, she asked them to confirm the customer number, and they did. That is the scary bit. Now, I have no idea if energy companies have some system allowing details for things like that for take overs and so or that allow this information to be obtained, or if, perhaps, previously they had managed a call and extracted this, or a data leak or what. But she did what seems to be a very reasonable check.

The problem is, and this is where scammers have a good chance of something like this, there is an issue with the smart meter not reporting properly, and so they have done estimated bills and been told readings. Sadly this is what makes the scam more plausible - months of estimated readings could be a sudden surprise bill.

This was very upsetting, but she said to email the statement please. She did not go for the pay over the phone so as to avoid being cut off next day. One of the main reasons she did not fall for it is that the scammers did not know that £6000 was, in this case, implausible. Had it been electricity not gas, maybe, but no way for gas in their case.

Now, checking carefully - step one, googling the CLI says SCAMMER, which is a clue.

Checking on-line energy bill accounts, DDs working, last DD a couple of days ago, no outstanding balance. Yes, estimated readings but checking and they are actually within around £10 of reality. So clearly a scam. Also a tad unlikely coming to cut off on a Sunday, and a tad unlikely an overdue account without any statements or demands first.

But some people would have been fooled. Indeed, had it been a few hundred, my friend may have been, even.

I am, however, surprised such scams work - how do they get the money? A card payment could be clawed back, surely. A bank transfer would not match the name or the known bank details. How do scammers actually make money out of this?

So watch out there please.

2025-05-10

Laws

When I was growing up, I learned that there were laws.

These were not simply rules or views of people like my parents or teachers, but something more. Laws were things that somehow defined the moral, and immutable set of rules for life. If you broke laws there were police that would take you away and lock you up.

Over time one realises that laws are not quite so concrete. For a start, they change, and new laws come in and old laws are repealed or changed.

The idea that something today may be illegal tomorrow, or the other way around, is crazy. It is how it works, but that is, well, just mental, how can a thing change from "right" to "wrong" or "wrong" to "right" just because we have moved on in time?

What I later learned is that these laws we all follow are created by, well, just people. And they are not people that have a lot of training, and learning, and credentials, and academic achievement or qualifications in their field. They are created by people that happened to win a local popularity contest in their constituency, working with others that have the same credibility. There is no qualification needed to make laws. There is no test. There is no exam. You literally have to win a local popularity contest to be an MP, and MPs can literally make new laws.

That, in itself, in insane, sorry. I mean some of them are sensible, and some even qualified. I have known some MPs that seriously know what they are doing. But "running the country" and, importantly, "making laws" has no qualifications needed. It is amateurs that won a local popularity contest, that is it.

So is there a better system?

2025-05-08

Environmental monitoring

The new Faikin Remote have sold a few, nice. Thank you. Now on Tindie, and more coming soon. The BLE linking to Faikin is working really well now.

But ironically more have sold not as Faikin Remote, so far, but as environmental monitors. The boards have pressure, temperature (via many means), humidity, and CO₂.

What is even more amusing is that the monitoring is probably best done using my generic display signage code (EPD) as it has all the sensor code to allow display of the values. No link to Faikin, but links to Home Assistant, and simple http polling, and so on, for all sensors.

Irony on top of that is I have had to just make a version of my display code for no display, a blind version, as it is ideal for this monitoring application even when you have no display (data centres, etc).

Home and office monitoring of CO₂ levels is becoming more important as people realise how much of an impact a lack of fresh air really has.

2025-04-22

Faikin Remote

We have done a lot of small PCB designs over the years, but by far the most popular is my Faikin board. Reports are that even Daikin have recommended it to people wanting Home Assistant integration! It allows control of a lot of Daikin air conditioners over WiFi, MQTT, web, and Home Assistant. Constantly improving, and easy to use with local working not cloud based.

My latest design idea is a rework of a previous "environmental monitor", but specifically targeted at the Faikin users. The concept is that it can be a display and control for the Faikin. Whilst some ducted Daikin have a wall mount control, it is not cheap, so this would work with those and the more typical wall mount Daikin that do not support a wall mount display.

Key functions would be:

  • Display current state of air conditioning unit.
  • Allow change of key settings (power, mode, fan speed, target temp).
  • Remote temperature sensor to allow room temp to be referenced at the controller in "Faikin auto" mode.

But the idea is the board can work with no display as reference temperature or just an environmental monitor for Home Assistant without a Faikin involved.

This is the current board design.

The expensive CO₂ sensor would be optional as it adds over $20 to the cost. Both the tab for it, and the 5 way joystick button, could be snapped off for a purely display or monitoring application.

A Waveshare 2" display fits on the front. Full colour 240x320 pixel. It is designed to fit the header so it can be removed if needed to access WAGOs, etc. The display adds another $20 at least.

User interface

I want to make the user interface simple - anything beyond the basic controls for the aircon you have to do via web interface. That should make it easy to use.

The idea is a joystick allows change of target temp (up/down) or switch to other setting (left/right) and change of mode and fan speed, as well as simple push on/off.

Bluetooth

Whilst it can all work over WiFi and MQTT, my plan is to link to Faikin using BLE as well, both ways. So Faikin reports mode/status, and this advises control and current reference temperature. This should make it extra robust with no need for WiFi or internet to continue working. The plan is a simple announcement BLE, not a connection, much like the many cheap BLE temperature/humidity sensors that exist.

Sensors

The current set of sensors include:

  • MCP9808 Ambient temperature sensor. This is highly regarded as a good temperature sensor.
  • VEML6040 Ambient light sensor (with a night mode to turn off display) including colour.
  • GZP6816D Atmospheric pressure sensor, and additional temp sensor.
  • SCD41 CO₂ sensor, with humidity, and another temp sensor. This would be optional.
  • DS18B20 connection 3 pin WAGO for more temperature sensors.
  • Detecting remote BLE temperature sensor.

All of these would report to Home Assistant as needed, and also report control and one reference temperature of choice to Faikin.

And yes, too many temp sensors, so system will allow a config of which are used and per sensor offset (to allow for heat via PCB). I may even allow averaging of multiple sensors. It will be interesting to see how this all works. DS18B20 are great for adding an "outdoor" sensor to report to HA as well. 

Generic signage

My existing EPD app which is general signage will be extended to handle the sensors as things to display so this can be simply used as a generic environmental display (and HA integration). Indeed this is likely to be the first code I do for these new boards, without a Faikin link.

Packaging

The basic board needs to be sold with and without the SCD41 CO₂ module. The board is likely $30 and the SCD41 adds at least $20 to that, probably more like $30. Not everyone wants CO₂ and humidity. The fluctuating value of the dollar is a pain in this all.

And then I may package with Waveshare 2" display, 8 way 0.1" pitch header, and extra M2 screws. This is likely another $20 or even $30.

Maybe even with DS18B20 sensor as an option. These are quite cheap.

I am not sure I want to do 3D case printing, but I plan a number of STL files.

Tindie makes such options simple, so that is likely the main sales channel initially. We'll see about Amazon as well. Those with A&A accounts will be able to order direct as always.

Update

The first boards (no button) have arrived. I have decided I'll try the TI TMP1075 as an alternative temperature sensor. In practice it seems a DS18B20 is best as it is separate from the board, closely followed by the SCD41. The MCP9808 (and presumably the TMP1075) suffers from some local heating from the PCB. The GZP6816D is close to the ESP32 and so not good at all for temperature (it is there for pressure). The T6793 CO2 sensor is not good, gives silly values (yes, I checked, and this is not a driver error), is bulky, needs 5V (does not work on 3.3V) and is actually not that much cheaper than the SCD41. The VEML6040 light sensor works well, but is a fun exercise for the casework.

Comments

All comments welcome.,

2025-04-20

One Time Pad (again).

I did a video 7 years ago: Uncrackable Pen & Paper Cryptography

It had several comments, many of which seemed to think there were ways of "cracking" it. There are not. Having got a comment recently, I did another video, OTP.

Wikipedia explains its quite well. It explains your cannot crack it if :-

  • The key must be at least as long as the plaintext.
  • The key must be truly random.
  • The key must never be reused in whole or in part.
  • The key must be kept completely secret by the communicating parties.

Even so, people still comment, and a friend of mine just posted...

"Rev, set a challenge on your blog first to decode message without a key wins a firebrick dragon?"

"I would have thought brittle[sic] force decode first 4 chars and wait till it looks like a word."

I really thought I had explained it, but clearly not.

The short version is YOU CANNOT CRACK IT!

In my second video I tried to explain this by dumbing down the message to just 0 or 1, with two possible keys, 0 or 1, giving a possible encrypted message 0 or 1.

Now, imagine you intercept my message and it is a 1

You can BRUTE FORCE try every possible key:

  • Key 0 means message was 1
  • Key 1 means message was 0

So what was the message? You don't know. You have no way to tell.

You don't know because every possible message, no matter how meaningful or meaningless is possible with a key, with equal probability of being the actual message.

The "I would have thought brute force decode first 4 chars" misses the point - you can brute force to make every possible first 4 letters, with no clue which of those is correct or even more likely.

And just to be clear, even if you know the first 3 letters are ANX (Ref Enigma) that does not help you because the key for those letters has no impact on the next letters (unlike Enigma).

So let me try and say it again, YOU CANNOT CRACK IT! I suggest reading the Wikipedia article.

2025-04-17

Back to LCD

My graphics library has undergone plenty of improvements for the e-paper work, but now I am back on LCDs. These have extra challenges, because they have colours and shades.

The main reason is new environmental sensor boards with LCD.

This means I need to anti-alias text, digits, lines, circles, etc. Previously I had pre-rendered 16 level fonts and icons. But I have moved away from pre-rendered bit map fonts in my latest e-paper code already.

I have gone through several approaches to this. The fact my fonts are vector based previously allowed me to just draw lines and circles on the e-paper. That is fine when over plotting is no problem, i.e. white on white is white.

But if you want to anti-alias you have to over sample, e.g. a 4x4 matrix to then know how many pixels are set (0-16) and use that to control alpha blending of existing pixel and new pixel (or background pixel and foreground pixel).

My first approach for fonts was to make code to allow me to tell if a point x,y is plotted or not - so instead of actively plotting dots (circles) and multiple lines that over lap other lines and dots, I have to do the maths to work out "is this point within a dot" and "is this point on a line". The dot is easy - simple Pythagoras. But the lines was more work - I can work out distance to a point is within stroke width using squares. Working out end of line is harder, so ended up working out the point of perpendicular intersection so I could range check end points and then check distance using squares.

It worked, and allowed me to over sample 4x4 and work out grey levels.

A better way

The problem with the above is the 16 times processing of points. So I came up with a new plan - scan lines and run lengths.

The new logic scans the character top to bottom to determine the left/right for each line or dot that is in the character at that scan line. This is actually quite easy for a dot as I can use a look up to get the left/right for any point on a circle and scale. The line is a rectangle, and the fact it is only ever horizontal, vertical, or a 45 degree line means I don't even need square roots to work out the points, and simply work out the left/right for the specified Y scan. It is simple to merge overlapping runs on a scan line and the max runs is low as we know how the font works (up to 6 ranges).

This means only 4 times the processing of non anti-aliasing, as opposed to 16 times. The runs can then be worked out 4 scan lines at a time and plotting a sequence of the same grey level. The same logic works for anti-aliased or not, just not 4 times over sampling on the Y axis when not anti-aliasing.

7 segment digits

The 7 segment digits are not simple lines and dots, they are a complex path (original in SVG), but it is easy to render and run length encode the scan lines for a single large 7 segment digit (well, 9 segments with colon and dot). I can then scale which lines I extract from this large image to make the same run length logic as I do for the vector fonts and use the same run length plotting code.

Lines and circles

Another primitive is lines and circles, and whilst arbitrary angle lines do need one fast integer square root to get the corners, converting to run length on scan lines is, again, simple, and can use the same run length plotting code.

The same is true for a circle, using the same circle lookup table (with interpolation for a larger circle than the table).

Even faster

All of the above still comes down to pixels, but there is a simple important step I have now added to that. I made the pixel plot primitive have a horizontal run length parameter. This allows a number of checks and memory access and so on to be worked out once, and then a simple loop to apply a run length of pixels plotted the same. When plotting 100% alpha it is extra quick as no checking of existing pixel and alpha blending. It can be a simple loop incrementing memory address. Having all of the primitives for fonts, 7 seg, lines, circles, and so on actually convert to run length makes it easy to use such a primitive.

QR!

P.S. Yes, everyone knows I am a stickler for accurate valid QR codes, but I have in fact gone as bit mad with an option here - the targets are 100% correct but the pixels are circles. This is because of the way QR codes are decoded hitting the pixel centres (having found the targets to get accurate alignment), so this should always work whilst having a subtly different aesthetic. I think it is better than some of the other QR code abuse, but it is an option on my EPD code.

2025-03-24

More on e-paper

I have learned some lessons, so sharing with you.

The 7.5" e-paper are fun, I have loads of them with the nice laminated glass and black border to sell, plug, plug!

But the story of making e-paper work is not simple.

Software

This I am good at, and the latest code allow a range of widgets and extracted values to be displayed in various ways on the display.

Hardware

This is where I am also always learning. To explain, even in software, where I have being doing this for what 50 year, and have a degree, even now I learn lessons.

But hardware is more challenging for me - my formal training is less, but not nonexistent.

But the real challenge is the turn around time - software I can recompile and try in minutes - hardware is days or weeks to try out as a proper PCB, days if I solder and don't have the components yet. I have done milled PCBs which make that easier in a way, well, quicker, at least.

Symptoms

So..., what happened? The issue was with the larger 7.5" e-paper displays which I have used for years - I have on my doorbell display and my fridge. There is one at the Indian restaurant and two at the pub. They work flawlessly.

What happened is trying one for some other people, and they wanted a displayed image, and that created "smearing" over the display. It looked shit.

It seems some graphics, and I have concluded it is those with a lot of black/white transitions across the display line, break down in an odd way.

The fix?

I assumed it was me, and did loads and loads of tinkering with different LUT settings, and temperature compensation settings and VCOM calibration settings and all sorts.

I got it working OK, but it created a new problem!

Fading and burn in!

It is not actual "burn" in as such but it has the same effect - a lingering image. What is worse was random fading - even 1 minute updates would fade away showing burned in images within seconds. But only some times.

Two factors - one was not doing a POF command, and that creates massive burn in within hours. Even now, at the right angle, on some of my test panels, I see that I tried this on "MONDAY". Do not do that ever!

The other is the LUT was working to push the KK and WW frames a lot, and that left the panel in some state with a charge that meant any change could leave this fading effect.

The effect would eventually dissipate if the display was constant but it could take hours.

This was clearly not the fix I had hoped for.

Henry

So what was the answer? Well, if resistance is futile, inductance is king!

The boost circuit I was using was based on a known working design and used a 10uH inductor. But that was for a watch, a small e-paper display.

The reference circuit Waveshare do has a 68uH inductor. I tried that, it helped massively.

But testing showed that bigger is better! So now it is a 470uH inductor. And that is amazing.

I can do normal changes and updates with no smearing effects in any way. My fudged LUTs still break, and make a fading effect but they are not needed - I can do simpler LUTs and not have issues.

The results are amazing - I can do a non flashy update which is not causing burn in and full updates that work. I have applied the Waveshare v2 panel LUT for full (fast, flashy) update as well. It does full "flashy" updates a lot over night to try and clear any unwanted charge, just in case.

So finally I have cracked my months long e-paper headache.

If you got one of my older controllers you may not even see a problem - it only happens with some graphics, but if you have an issue the fix is a simple component change - ask me if you need a new 470uH indicator sending.

2025-03-19

Do I have to pay council tax?

Apparently I have to pay my council tax by CASH monthly...

This is a shock, honestly! I would normally pay by bank transfer for whole year up front.

But OK... Except.

Err, OK, so do I have to turn up each month with cash which they cannot accept?

To be fair, if that saved me over £3k a year in council tax, I'd do it. I'd video record each attempt to pay, obviously, for a judge if they tried to take me to court.

Apparently "Cash is the default payment method that the council tax system uses for payments other than direct debit. This does not mean that the payment has to be made in cash."

As they seem confused, I have asked...

We'll see.

Hamsters

You may or may not know, there is a porn site called xhamster - I have literally no idea why it is called that. 

I'll save you visiting the site to check: Even though it has a cookie banner, it has no attempt whatsoever to operate the age verification required by the Online Safety Act. Not even a simple "I am over 18" button (which would not comply).

Yet, it is reported a forum for people with pet hamsters has shut down, along with hundreds of other sites and forums run by volunteers and individuals, because of the risk of fines and cost of compliance with this crazy new law.

OFCOM reportedly consider the costs of compliance for small sites “are likely to be negligible or in the small thousands at most”. Even without the risk of a fine of up to £18,000,000.00, the costs of "small thousands" of pounds, which OFCOM considers negligible, is more than a small volunteer site can bear, understandably. We are not talking businesses with income and a budget for legal fees here!

What is especially frustrating is the unknown - I don't know if this blog is in scope, and if so whether google or I personally am at risk of a fine. Worse - actual lawyers don't know either. I don't know if my GitHub repositories are in scope, and if so whether GitHub or I am liable. I don't know if my single user mastodon instance is in scope, etc... OFCOM have even admitted that they have no definition of "email" (one of the exceptions - yes you, or kids, can be on a porn email mailing list with no restrictions under this law). I have, again, written to my MP asking these questions.

A fun one, I do not know: If my blog is in scope as it has user generated content (comments), if I stop publishing comments (i.e. they get emailed to me, which is out of scope, and maybe I paraphrase and reply by an edit on the blog post) does that make it out of scope, or do I have to delete the user comments from before the new law came in to force as well?

Think of the Children, indeed, but making millions of individuals with small sites comply, at a cost of thousands of pounds each, is just crazy, especially when the law is not even doing what it aimed to in the first place.

By the way, my personal view on porn is that we need better education for children on the nature of porn as entertainment, and how actual relationships are not the same - after all we allow crazy violence in TV films and shows as entertainment, which people know is not "real" (even for <18 rated films where someone blows ups the planet, etc), but have a hang up over porn for some reason. At the end of the day nothing will stop a teenager with hormones from seeing porn, so let's accept that and educate to make that safer for society. But that is just my view. You may disagree, which is fine.

“There is a simple solution – the Secretary of State can exempt small, safe websites from onerous Online Safety duties, and protect plurality online.”. In practice this could be suitably worded so that small sites (by some measurable metric), and non business sites, etc, only need to comply if explicitly notified by OFCOM. This would mean no loophole for small sites that are actually porn sites, but provide the reassurance for those with pet hamsters to be able to continue their forum.

2025-03-16

Stroke

The NHS have been very thorough investigating the stroke I had.

Thankfully the ongoing effects are slight - my typing is still more iffy than it was before, but good news.

They even did an ultrasound on my heart to try and find the underlying cause.


The good news is they found nothing. Well, I'll take it as good news. It also means they could not explain it, which is not so good. But given I had a stroke immediately after COVID, that seems a likely cause.

However, the one thing I find odd is the NHS efficiency here. The letter arrived this week (13th March 2025).


So what happened. I don't think even Royal Mail have a 17th class post that takes 6 months to deliver a letter. So that is rather weird.

2025-03-09

Right to private communications

The European Convention on Human Rights protects the right to respect for private life, the home and correspondence. This includes protecting the privacy of messages, phone calls, and emails.

But UK and EU governments are trying to break that right in various ways.

So some thoughts.

  1. Encrypted communication is a thing, it exists, it cannot be banned, it is just maths. I have done a nice video on how to make an uncrackable entirely manual encryption (one time pad) here.
  2. Criminals can use encryption. My video is an extreme example, but in practice the tools to do this electronically in many effective ways exist and can be used by criminals, and MPs.
  3. There are even ways to use encryption in a way that is mathematically impossible to prove you are doing - steganography - where there is no way to tell your encrypted messages apart from random noise in say an image or video.

What this means is that even slightly savvy criminals are safe. The tools all exist and are easy to use. The only issue is if non criminals like you and me can expect that right to privacy.

The Investigatory Powers Act (on which I commented, and was a witness at parliament) did, and does, try to crack encryption as a legal process, maybe, the wording is not ideal. Apple's news on this is one of the key examples. Not the first and not the last, and not something that actually tackles criminals using encryption, it will just make normal people way less safe. Remember criminals can use encryption!

One of the challenges for most normal people is how to use encryption. Most people do not care, or know, why they should even. But there are many ways. The old school ways are using PGP email, which is complex but that is no longer the case. There are many apps and ways to communicate securely, and the obvious ones are things like iMessage (for now). Apple designed it to be secure. But also WhatsApp and Signal.

The problem is that any organisation operating any messaging system that is secure is subject to secret orders from governments to impose back doors.

There are even calls for scanning content for illegal material, which only works if a service has access to the content. This has so many problems, apart from breaking basic human rights. And, I remind you that the "bad people" with "illegal content" can always encrypt what they do anyway, and even secretly if they want to. They actually have an incentive to take the extra steps that normal innocent people do not. The only problem is removing privacy for normal people.

So now to come to the main point of this blog...


Delta Chat

This is an app that works with email, it connects to your provider's email server (not all providers work, but many do, using IMAP and SMTP), and allows a more traditional style messaging app that makes encrypted communications simple.

It is clever, well done.

What is extra clever is this is just an email client. It is not a service that is subject to either Investigatory Power Act or Online Safety Act. Indeed, the latter explicitly excludes email, a term OFCOM consider everyone understands (really!).

But it makes secure encrypted chat a thing anyone can do, easily, in a way that legally there is very little that can get in the way.

So worth considering.

Muddled?

I have been advised this is all a little muddled, and I agree.

  • IPA issues with Apple in the middle of OSA coming in to force
  • OSA not applying to email, but OSA is not directly an encryption thing, probably.
  • EU trying to do content scanning which means service providers having access to content.
I agree, it is muddled, and I bet that is intentional for some, but this is to try and say there is a way to chat, encrypted, with no scanning content, and no age checks, all in one, and easy to use.

2025-02-27

More with E-paper

My previous code allowed a number of settings to be stacked up to suit all sorts of needs - a clock, day of week, sunrise/sunset, and even bin collection details.

I have started a new version now, at https://github.com/revk/ESP32-EPD

This is around the idea of a stack of widgets, each placed on the frame buffer.

This would seem a simple approach - and each widget can be positioned and aligned as needed. The idea is to have at least the same functionality as before, but allow me to work on more and more widget types over time.

So the basic widgets are:-

  • image
  • text (choice of two font styles)
  • digits (i.e. 7 seg so cleaner in-situ updates on e-paper, intended for a clock)
  • QR code

But even then it is not simple - I have some content substitutions to allow display of $DATE, $TIME, $DAY, $IP, $SUNRISE, $SUNSET, and so on. This makes a simple clock very easy to do.

Text

Whilst most of the above are simple, I have done a few extra bits - allowed multiple line text. Added some characters to 7 segment font to allow display of hexadecimal and the like, etc.

Images

Images were, however, a major change. previously I had full frame (for this 480x800) 1 bit per pixel (48000 bytes) file. Easy to make with some scripts. I also had some similar (smaller) icon files for the bin collections, but they need to know the image size to work.

I wanted more, and I wanted easier.

For a start, for E-paper, there are some more things I need from images.

  • Would be nice if image file said size so I did not have to know in advance and users would not have to make images a specific size
  • Would be nice to allow transparency, so one image on another can work without solid rectangular borders.
  • Would be nice to allow not just black/white, but black/white/red for 3 colour E-paper.

None of these work for the simple 1 bit per pixel images.

So, for that reason, I have moved totally to PNG files (as per previous blog post). I have yet to code the black/white/red, but I can now.

Masks

One change I realised I needed was a plot mode - does text plot black background and white text, or just white text, or maybe just black text, etc. So I now have invert and mask operations on all widgets. 

Seasons

The system still has a season letter E=Easter, M=FullMoon, X=Xmas, etc. And allows that season code letter in the image url, so that works.

Bins

Bins (i.e. which bins to put out next and when) are the remaining widget to re-do. PNGs for the icons will make it way easier.  No need for fixed size icons and pre-converted images.

I plan to define a simpler and clearer JSON format and implement (and document) that first, but that will be soon.

More widgets

There are a load of obvious ones to add...

  • Weather from an external weather URL, to show icon
  • Weather to show min/max temp, maybe a $MINTEMP/$MAXTEMP or something. Adding ℃ to my font may be a challenge.
  • Might be fun to add some sort of delivery tracking estimated time some how - but this means knowing tracking, and so on. Something too think about - a sign in the hall showing we expect a parcel would be really useful.
  • I did previously have an SNMP uptime thing, I could add that back.
  • Well, what else?
The nice thing is adding widgets is pretty simple with this structure, just more widget types in the config and the code to back them.

2025-02-25

Confidence

This is one of those more personal blogs.

This week, well, started last week, I had a small technical challenge. The exact details do not really matter for this. But I'll explain.

I wanted to code something - something that was not quite readily available (some people had things very close to something I could just use, but not quite, which is where it gets fun).

The boring bit: It was a system to decode PNG image files, and allow me to use them in an embedded system driving a e-paper display. The details do not matter.

All that matters is that it was not easy to do - it involved understanding a detailed technical specification (PNG), and a new thing (zlib) which I had not used before. For a change the specification is a really really good one, which, in many ways, makes it easier.

Can I do it at all?

A biggie for me is should I, can I, even embark on this project.

To be clear, I have no reason to. Nobody wants this (well they may now), nobody needs this, nobody is asking for this, nobody is paying me for this. It is solely to make an e-paper thing I have easier to use. It is educational for me, a challenge.

Indeed, many of the helpful suggestions are to use a different file format, and not png. I do that already, but I wanted to make it simple - all can handle "save as png" I feel, so can I make it handle png. All and every format for png though?!

The protocol - the file format, which I literally sat in hot tub for over two hours reading, is good. But has some tricky bits. One is the compression/expansion using zlib, something I have never done.

I was seriously concerned I could make this work at all. Could I do it? Could I do it in a way that fitted in memory on an ESP32? Am I up to the job?

Yes I can!

I decided to go for it, in linux and then ESP32 code.

Each step worked well, and was not an issue. Minor changes as I coded. Lots of testing. zlib is easy, it turns out. zlib works on ESP32 too.

PNG has a lot of options, and as a decoder you have to handle them all. As an encoder you can be picky, but decoders cannot. I had to slog over the different options - make every one work properly.

In a day?

I spent a day, well, until early afternoon, and then a couple of hours next day. Total time under one day's work.

It works!

It went perfectly - the bugs were simple to fix. When I slept on it, all the remaining bugs came to me in my sleep, like they used to.

Not lost it?

So no, I have not lost it!

The work was not as easy as it used to be - younger me would have worked on in that evening and not next day. Younger me would not have made as many typos (way more since I had a stroke). But the results is good.

I worry about "losing it", and "imposter syndrome" all the time. I hope this is is a good sign I am not a losing the plot, honest.

Here it is https://github.com/revk/ESP32-LWPNG

2025-02-18

E-paper

E-paper is pretty magic stuff, and somewhat voodoo in the way the drivers work.

Some time ago I made my own drivers for various e-paper devices including the Waveshare 7.5" 480x800 mono display.

The only complicated bit was working out a fast LUT to allow things like the clock update without several seconds flashing the whole display black and white. If you have used e-paper, you will know that a normal update is a muti second sequence of black and white flashing, even if only for a region of the display.

This is problematic in many ways, leaving some level of shadow of the changes, and possibly causing charge to build up and create ghosting. I ensured we do some full updates (only once a day), but that seemed to be fine. I have used this on signs for some years now, and they work well.

Seven segment digits

The use of seven segment digit fonts for the clock, i.e. what changes every minute, is important too. Any shadowing looks clean because it shows on the segments that are logically on or off only, indeed a shadow of off segments looks perfectly normal, even deliberate.

Applying the fast update a couple of times also works well to kill off the initial shadow of the change.

So yes, this works well.

Problems?

However, having used this for some years, I ran in to a snag.

The problem is down to the choice of black and white on the image as a whole. I did check, and adding some heavy capacitors on the power lines did not help, so not that. A choice of image with a lot of white (even as shown here) was enough to create some extra ghosting on change and look messy.

So I tinkered some more. I got a very clean effect initially but greying and fading within seconds, arrrg! I then decided to leave the power on, PON, and that works to hold the black and white cleanly. Yay.

But no!

This was creating a nasty cumulative effect, over several hours the display did a nasty burn in. It is not a real burn in, but charge on particles in the display. It meant that the display got more and more ghosting of previous segments and text. After a day it was really terrible.

So back to the auto PON/update/POFF, which is what I did before, but that again left it grey.

Finally after yet more tweaking, I have a settled on PON, update, POFF manually, i.e. not using auto mode, and setting a 4 frame setting on POF (not 100% sure what that does). The result was that the final fading was very slight, leaving a pretty clean display even when there is the problem image.

Clearing the burn in

I then had to do a lot of black/white full refreshes to try and clear some of the burn in and it is working, but taking time. I have added an option for over a hundred full updates in middle of night, now.

So I think I have it sussed, again.

What's next?

My E-paper code allows clock, date, sunrise/set, QR codes, (seasonal) images, and a few other bits, even (at a push) bins that are to be put out (Monmouthshire). The effects are configurable and stack up from the bottom of the display (well, bins at top).

But I think I will start a new version.

The plan is a series of widgets that you can set anywhere on the display and any size in any order. This will allow me to add more and more widgets - maybe weather as well, simple text, images of other sizes. All sorts, and easily extended over time.

Buy these?

Finally the plug, I have sourced 100 of these very nice 7.5" displays, and selling on Tindie with and without my controllers.

Regardless of my work on this code, you can always load esphome, or other code to run these displays.

2025-02-09

IronMan

The IronMan project has been challenging...

Basically, we know someone that does IronMan for events and parties, along with others that do Spiderman, and so on.

But the suit he has is somewhat failing - the original electronics failed a long time ago, and the reworks (no idea who did) also failed.

So this is at least third, or more, refit for this, but we have taken it on with some serious dedication I think.

The helmet

The helmet has a servo, to lift the visor, and LEDs for the eyes. We actually replaced the electronics on this twice - initially a simple LED controller, and then a more custom board.

The eyes are now WS2812 LED strips. so way more flexible, even if normally just static cyan.

One of the challenges was the current spikes from the servo - it killed LEDs. Big capacitors is the main fix for this.

The suit

The suit was also a challenge, and really, the stuff in there was a mess. Again, two stages, firstly a simple LED controller for the "arc reactor", but now gutting it all and replacing with custom controller handling multiple LED strips, and speakers.

The previous electronics had several primary cells, a rechargeable battery, and speakers and LEDs. But the speakers never worked properly apparently.

The new build takes a lot less space, is rechargeable, and lasts all day.

The gloves

These were especially challenging. The helmet and suit could accommodate a decent USB battery pack. But the glove are too small, so needed a design that could handle a small LiPo, and charging.

The previous electronics were a simple LED torch fitting and 9V primary cell. This was bulky, and just "lit up".

The new design is a rechargeable LiPo, and 88 RGB LED rings with diffuser, button, and repulsor effect.

Overall

The end result is nothing short of as complete revamp.

Less space taken in helmet, gloves, and suit. Rechargeable batteries in all, all lasting 8 hours. BLE linking so sound effects link to repulsor in gloves and helmet sounds.

At this stage there is concern the LEDs for the arc reactor and gloves may be too bright, and the speakers too loud, both of which can easily be adjusted.

Speakers

One of my concerns was the speakers, and I found these were the best. I tried 5 different types.

From PiHut, and really good.

They are glued inside the suit but sound awesome.

My son should have a video on it all soon.

2025-02-08

Tindie so far

Well, the Tindie store is set up, and I am adding stuff.

https://www.tindie.com/stores/revk/

The basics

It is simple to use and way way way less hassle the Amazon. Amazon are a pain to make any change to any listing, often even refusing to do so for no good reason. Tindie, is simple, just works, changes are easy and happen immediately.

I am shipping, which is less ideal, but RM click'n'drop works well. I may be able to do more with APIs to tie things up more seamlessly in due course. As this scales up this will no doubt transfer to the sales team in the office.

Options

One nice thing is I can add sales options - which works because I am shipping to order. I did this on the coaster. Which diffuser to use, and if shipped assembled or as a kit. This would not work with Amazon fulfilment, obviously.

The costs

Works out around 10% in payment and Tindie fees. Pretty typical.

Getting paid

Payment via PayPal was a concern, especially as it looked a lot like I could not get PayPal to send me money without open banking crap (giving them access to my account!). However, we sorted the business PayPal account, and that allowed simple fast payment to the business bank account and did not appear to involve any fees, and seemed sensible exchange rate (Tindie is all in dollars). Looks like it is monthly, which is simple enough.

Looks like I have to go in to PayPal and accept the payment and then tell PayPal to send the money, which is a nuisance but not to much so on a monthly basis.

Paperwork

We need to work out VAT and paperwork, but simple enough to convert all to GBP on the monthly payment and generate the right VAT invoice matching the money that arrives - should keep HMRC happy. Again, this is where I may API it all and make it simple and seamless.

API

This is probably next step - make more streamlined for orders and paperwork. I'll write that up in due course I expect.

2025-02-05

Don't use UPS

I know I said before, but this is an update on the saga.

Executive summary

  • I had 4 parcels sent from China (same sender) via UPS, all marked with our VAT and EORI.
  • UPS tried to charge a fee, it seems contrary to HMRC advice they do not do Postponed VAT Accounting by default.
  • I refused delivery and they confirmed return to sender (I confirmed the rest by email), but only sent 3 of the parcels back.
  • They told the sender the missing parcel had been disposed off.
  • They told me the missing parcel had been abandoned because "the sender is not served by UPS", something that is clearly a lie.
  • They have invoiced for VAT (and an un-agreed disbursement fee) for all 4 parcels, and then late payment penalties.
  • It has taken over 6 weeks for this to get close to being resolved.
  • Use DHL, or maybe FedEx. Don't use UPS!

Postponed VAT Accounting (PVA)

I've explained PVA, but basically a VAT registered business getting overseas deliveries should get them without paying a fee if the sender includes the VAT/EORI when sending, that is HMRC advice to couriers. It gets declared on import and we (recipient) get paperwork from HMRC to ensure we account for it and the reclaimed VAT on next VAT return. Simple, easy, no admin fees, no delays.

  • DHL manage it - not problem
  • FedEx manage it - usually - not always - but seem to cave when pointed out.
  • UPS want a separate signed agreement with us and the sender, and extra paperwork by the sender on every shipment. No way random foreign senders will do this. It is just, in my view, incompetent. Senders know to do VAT/EORI, but not extra UPS paperwork.

What did they do wrong?

I did try a parcel via UPS and it all worked well, but the good value of the parcel was $2, one of JLCs super discounted bare PCBs. That arrived, no fees, no invoices. Surprising. That lulled me in to a false sense of security and 4 more orders were shipped using UPS. Big mistake.

First arrived and driver wants a fee paid, I said no. I actually include the VAT on the address as an address line as well as on the waybill so I pointed to the VAT number on the label and explained it should be PVA. He had no idea, and literally threw the parcel back in the van.

Of the 4 parcelled, one other was tried and my wife rejected it. On that occasion the driver was very used to such things saying loads of people reject parcels with fees - usually because they paid fees to sender to handle and UPS cocked up (slightly different to out case). This really says something of UPS's competence.

The tracking showed each of the 4 parcels having multiple refused deliveries, this was clearly a lie. Not their first.

They took weeks to send 3 of the parcels back to sender. I guess they can take as long as they like. But when only 3 arrived we asked questions. They told the sender the parcel was disposed of. This was a lie, what a surprise.

They told me it was abandoned. It took weeks to get the explanation that "the sender is not serviced by UPS". This is a lie, wow.

They sent an invoice for the abandoned parcel (VAT and disbursement fee), which is not valid, obviously. I checked the HMRC import records and they only recorded (and hence paid HMRC) for the other 3 parcels. They were charging me for VAT they apparently have not paid HMRC. That sounds really fraudulent to me.

They sent invoices for the other three, even though returned to sender.

They kept quoting their terms and conditions that they can basically lose or destroy a parcel and not be liable to anyone. Wow! I have repeatedly had to explain that I am not subject to their terms and conditions. I have not agreed them. I am not a customer. I have no contract with them.

I have explained that if they have appropriated my parcel, that is Theft, a criminal matter. If they have lied ("sender is not served by UPS") to do that, then that is Fraud, a criminal matter. I was getting nowhere.

Surprise!

To my utter shock, they sent back the missing parcel to China. It arrived there after many weeks. The UK UPS contact seems unaware of this?!

But then, I get an invoice for late payment penalties - even though I have no contract with them that could lead to such penalties. Even statutory late payments penalties are a statutory contract term and don't apply if no contract. This is verging on harassment.

They have, eventually, cancelled invoices and late payment penalties. I have not seen any attempt for them to correct the HMRC import VAT reports though.

Update:

We are late March now. They are no longer chasing invoices or late payments, but would not accept that late payments are invalid and they should refund every customer (late payments are statutory as part of a commercial contract which does not exist in this case).

But they are now hassling JLC, the sender, saying a parcel is stuck in customs awaiting payment of duty. It is almost tempting to pay it and then claim damages when they fail to deliver the parcel (the one they sent back to China months ago).

2025-01-31

Bluetooth (BLE)

I have been working on some more educational R&D for the last week or so - exploring the possibilities with Bluetooth, specifically BLE.

The application involves four battery operated devices that need to link together.

  1. A helmet, with a servo to power a visor up and down, and LEDs for the eyes.
  2. A left glove with a disc of LEDs in the palm (I believe called a "repulser").
  3. A right glove, the same.
  4. A suit with speakers and a large ring of bright LEDs (I believe called an "arc reactor").

Why linked together?

Each works independently, and each has a button to trigger working. The repulser will quickly fade up to a bright light then go off. The helmet goes up or down.

The ideas is that when you activate the repulser, a synchronised sound effect of an increasing sound and a whoosh and crash happens at the same time. Similarly when the visor closes there is a synchronised clunk as it finished closing. A few other synchronised novelty effects have been added as well.

How to link them together?

The obvious, and low power, way to link would be cables, plugs and sockets. But this would be hugely inconvenient for the weather.

So - Bluetooth, specifically low energy BLE.

Daunting task

This was indeed a daunting task. I have done a little with BLE, just passively scanning advertisements to pick up and decode advertisements from temperature sensors. This would need a lot more.

But I went for it, and, well, it took a day!

Basic example code

I used the basic security gatt example - and to my amazement it worked. Minor bug and slight tweak, but very quickly I had a "heart rate monitor" server, and there clients connected. I then succeeded in having clients change the heart rate monitor location (text) which I used to tell the suit what sound to play.

Moving on

I tried to adjust the GATT fields, and failed. I need to read up more and understand how to do this, and add device information perhaps. Then consider making custom service codes - after all, calling an arc reactor a "heart monitor" is perhaps a stretch.

I need to properly understand the example code in the process, and prune it down.

I've also applied for a Bluetooth manufacturer code.

2025-01-27

How long is a month?

A month averages 30.436875 days, apparently, according to google, but sounds right.

A lunar month as we see from Earth is 29.5306 days, again, according to google, but sounds right.

What is fun is people saying we should do 28 day months, which is, I think, not daft for many reasons, but we need to allow for the extra days, or two, outside of the months. The extra day(s) would be way better at end of year and a holiday. What is special is that one reason they say this is to align with the moon which is simply not the case.

But put that all aside and let's talk of prescriptions!

In England I had, I think, 8 week prescriptions, and in Wales it is 4 week.

But clearly things vary around the world, and there seem to be two key styles of packaging for drugs - either 28 day or 30 day.

This must be hell for any pharmacists, either adding 2 or removing 2 from packages to meet 28 or 30 day based prescriptions. Why no standard?

Freestyle Libre 2

But this gets interesting. If you have these on prescription the pharmacist cannot make it up from 28 day to 30 day, or from 30 day to 28 day, they are 14 day sensors. They are 28 day for two, 56 day for 4.

So they are not like other meds that can adapt to 28 or 30 day basis. You cannot add 2 days extra from next box to make a 28 day prescription to 30 days.

Freestyle Libre 2 Plus

They now do the plus which is a 15 day sensor. This means they can work with 30 day based prescriptions. A clever move. But still, a pharmacist cannot take 2 days out of a package or two to meet a 28 day based prescription.

Cynic

So now the cynic in me says...

  1. It probably is the same sensor. They may have had to do new approvals, and new tests and trials to prove it is within a good tolerance after 15 days, but I bet the 14 day sensors are the same, just not verified as such. Yes, I may be a cynic.
  2. This means they cost them the same, but what if NHS pushed for lower costs, this means a 7% reduction in cost when selling the same thing for the same price, that is a win for the bean counters.
  3. Anyone on normal 4 or 8 week prescription will take a year, or two years, to have a prescription where there can miss a prescription and so mean Abbot actually lose out.
  4. But anyone using these knows they fail some times, so a spare is handy, so nobody, when they get to the year, or two years, when they could skip this on a repeat prescription will do so. Why would you?
  5. What is clever is that if one fails, and someone now has a spare, they will likely just use the spare rather than the hassle of calling, or filling in web form, to get a (free) replacement now. That will make the failure statistics way better, whilst meaning they get the same money as they would from 14 day sensors.

To be very very clear, this is a totally cynical viewpoint, and my own personal speculation. It may not be true.

Update

Yeh, minor revision to PCB, nothing more.

IR LED controllers

I ordered a couple of LED controller remotes. Now to work out how they work. The first (big one) is simple 32 bit NEC coded (i.e. address, i...