2026-09-24

Taxing home internet

There seems to be a proposal to change TV licensing to a tax on home internet! Thanks to this article from ISP review.

I hope it goes nowhere, otherwise I can see myself being an expert witness to parliament, again!

The proposal is "that every home with a broadband connection could automatically help to fund the BBC, even if nobody in the house watches live TV, via a new £11 (monthly) “Home Internet Levy” on their existing ISP bill".

As someone that runs an ISP this immediately rings alarm bells. So let's look at how this could possibly work.

To be clear: I am not covering the merits of the BBC - there is much one could discuss on such things - let's assume the BBC continuing is sensible - let's look at this proposal on that basis.

What they imagine?

My guess is that those proposing this assume that the vast majority of households have a single internet service from a big company ISP, so getting the ISP to add an £11 levy to the bill is simple.

The reality...

The reality is different. There are hundreds of ISPs, large and small, some very small (think a dozen people on a WiFi in a village). The admin is not going to be simple. But there are also a lot of edge cases, and these need to be addressed - even a small minority impacted by, say, paying twice, would cause some uproar.

Multiple lines

Some households have more than one internet service. It could be multiple lines from one ISP, which is not too hard to address at the ISP level. But as an ISP we have no idea if someone has internet at their house from another ISP. If we are to avoid double billing such people (and I really think we should, after all we never double billed people with two TVs) we need a way to sort this. So does a customer tell one ISP they have service from another, send a copy of the bill - that is not difficult to forge, but also impossible for the ISP to validate. Maybe we need a national database of which ISP is the tax collector for each property - that won't be simple.

Business lines

Another small snag is business services. At present a business premises may need a TV licence if they have a TV, but most business premises do not have a TV or need a TV licence, so we need to exclude businesses from this new levy. After all it says home with a broadband connection.

So do we exclude business premises - well this is more admin, and there are databases which identify a premises as commercial. But remember, a lot of people work from home. Indeed, a business service from an employer in addition to a home internet at the same house is one reason you may have two internet services at a house. Mind you, my house, an ex pub, is listed as pub/nightclub on BT's database still, yay, no £11/month for me.

So maybe exclude a business service? Is this down to how the ISP sells it? We sell home and office (business) services. The business ones cost more, but not £11 more - so all our home customers would be mad not to switch to a business service and save money - we'd love that as we charge more for a business service but would not have to send any of it to the BBC.

OK, what if only services sold to a business? Again, people work from home, and there are sole trader businesses. If one can save £11/month by putting down a business name, everyone will.

OK, what if only to limited companies? You know a lot of solicitors offices are a partnership not a limited company - they will love their internet service having an £11/month tax. Of course, it would also be easy to order home internet, and pay for it, but put in the name of a random limited company - hard for ISP to police as companies do this - ordering internet for an employee at home. As long as paid for, not an issue - but when not paid for then the ISP is chasing a random company that has no clue. Putting that fraud encouragement aside, it is less than £11/month to create a limited company and the annual filing!

Shared service

This sort of comes down to small ISPs, but what of blocks of flats with a fibre, paid for by the community or housing association. One £11/month fee? Or does the HA have to collect the tax per home?

There are a lot of WISPs (Wireless ISPs) that do this on such a small scale as well.

Mobile service

This is another huge issue. Mobile internet access would not be included, well we assume not. If it was, you have households paying not just twice, but three or four times over because multiple people have mobile phones.

However, a mobile based home internet is a thing - a 5G router with a SIM and WiFi access points. This is a viable home internet service already - usually in cases of good mobile coverage and poor internet "lines", i.e. where feeding a new fibre is hard. It competes with traditional landline / fibre services already. If mobile services are excluded, that changes the economy here. It will cause people to prefer mobile home internet as cheaper. It skews the market which can impact businesses and infrastructure as well.

Of course, someone will say there are ways to differentiate a 5G router and a mobile service - but how? There are mobile phones and iPads that never leave the house, so not by location. And you can usually put a normal mobile SIM card in a suitable router/WiFi without mentioning it to the mobile company. Even if you cannot, just get an old mobile and suitable SIM in hotspot mode as your cheap home internet.

Auditing ISPs

Another issue is that there are a lot of ISPs, and you won't even know of them all with ease, how do you audit that they are (a) charging all home customers £11/month, and (b) if they are, that they are passing on the full amount? Who is going to do these audits, and who is going to pay for them?

Existing special cases

Of course, TV licensing has special cases for blind people and old people. Scrapping these exceptions in any new scheme would also cause uproar. How the hell can ISPs check these things?

One reason this is all silly

The whole TV licensing thing is odd anyway, it was a Wireless Telegraphy Act thing, a licence to operate radio receiving equipment. That alone is odd, licensing transmission equipment sort of makes sense because of limited spectrum and risk of interference, but no reason to licence receiving equipment (apart from a money making scheme, oh, that's the point).

This got expanded to cover ways to get TV over wires (cable TV, etc), which itself made the whole Wireless Telegraphy thing even dafter. It has moved to, I think a Broadcasting act, and I think now Communications Act, not sure.

Now, remember, whilst this started small, radio equipment licence, it quickly became an All homes in the UK fee - basically everyone had a TV (almost) so everyone had to pay a TV licence.

At that point it would have made sense to move BBC funding to being from general taxation. But that did not happen. Instead, as usage of TV changed the rules have got more and more convoluted over time.

The objective is to try and make it All homes in the UK again, clearly. The idea of taxing home internet is clearly based on the ideal that everyone has home internet.

But why do that - why make it a convoluted tax, which needs huge admin, and a lot of exceptions and special cases which make for loopholes. We have per home taxes already, if they went up by £11/month but no TV licence, a lot of people would be happy as paying slightly less.

This would be a hell of a lot less hassle, and for a lot of people less money and one more thing not to worry about. No more criminal TV licence evasion - problem solved.

Well, that, or make it that people who want BBC services, pay. Bear in mind, when TV receiving licences started, BBC were the only station - actually it started before the BBC were a station even and really was a radio receiving licence. But for some time it was only people accessing BBC services that paid a licence fee.

But either way - public service or paid for service - it should be one or the other not this convoluted legal and administrative nightmare.

Cynical

Let's be cynical for a moment - why now and why this proposal?

The now is kind of down to the existing funding model becoming more and more convoluted and unworkable. That is pretty easy. That said, this is probably just convenient as could be said any time in the last 10 years.

The this is harder - the really obvious answers are either pay for access or public service from general taxation. This proposal is neither. It is creating a new tax, and a means to collect it.

Why would anyone want a new tax - well they are useful - find a way to make a new tax that is (a) justifiable for some public good, and (b) actually less money for 90% of people, and you get away with it.

But what happens when you have a new Home Internet Tax in place - well simple, you can increase it. Boiling frogs. It may be for the BBC now but really is not linked to that even in the existing convoluted ways. So yes, you can increase and extend an Internet access tax as you want, once it is in place.

2026-09-02

Clocks

Some time geeks (should I say Time Lords) checked out my clocks.

Seems they are impressed, saying sub microsecond.

I have spent all day trying to improve on that, and I think I have.

The issues are several - the PPS interrupt that captures the time signal works well, but can randomly have extra latency. The original signal can have jitter, drift, and ever sawtooth (actually have not seen this).

What I did not realise is that there is also noticeable clock drift on the processor, probably temperature related.

I previously assumed clean "on the second" PPS. I have changed it so that is used as a reference on longer term (moving average 5 mins) for frequency, and shorter term phase offset tweaks.

This means my per second reference CPU cycle counts change by 1 at a time as things change, the main change being clock frequency drift. This result is reference ticks varying by 4ns or less.

I need to get the Time Lords to check my latest code and see what they find.

2026-08-31

Dodecahedron

I was shown a dodecahedron with LEDs inside. Looked great, so decided to have a go.

The principle is not that hard - a PCB strip on the inside of each edge with WS2812 style LEDs, and solder pads on the ends, then a triangle corner piece on each vertex soldered to the strips.

The challenge is making it one continuous LED chain for WS2812. As you can guess - 3 way vertices makes that tricky.

After sleeping on it, I realised I need two types of corner.

First off, the strips, I made the ends consistent.


The idea is the strip has two lanes - one goes through all the LEDs (left to right on that image), and the other just connects from one side to the other with no LEDs. So instead of each edge being one way, it is a two lane road. This allows loops around the edges of the dodecahedron.

Now for the corners - after some thought I decided I need two types, I called Y and C.


The Y type feed each lane to its left. The C type link left and top both ways, and loopback the right. I then designed it so it is just one PCB, with Y one side and C the other side.

If you made all vertices Y then it would be a loop around each pentagon.

But the logic is pretty simple. If you put a dodecahedron on a flat base, you have a bottom, middle, and top.


The middle 10 you put Y corners, and top and bottom you put C corners with the C facing sideways to the next edge around. The effect is a loop or Ys around the middle, with each vertex taking a detour up to the top or bottom and then one edge around the top or bottom before looping back to continue around the middle.

You will see two issues with this.

  1. It is two loops, a top hemisphere and a bottom hemisphere, not joined.
  2. It is a loop, but WS2812 is a string.

First issue is solved by changing one of the Y middle pieces to a C, facing the C sideways. This C links the two sides making a loop for the entire thing.

Finally the C has an extra pad, and an area where you see to cut a track. Cutting the track breaks the loop, and the pad is where you inject the WS2812 signal.

The exact mapping will depend which C you tapped in to (the obvious one is the extra one on the middle row), and which way around each LED strip is fitted - either work, just change where it is on the string.

Final step was designing a support as a 3D model, 30 pieces that fit together to hold the PCBs. That involved far too much trigonometry for my liking but I worked it out.

2026-08-14

Tick Tock

I am pleased to say that my new time servers are in the UK NTP pool now.

Dave has done a nice report on how well they are performing, here.


And this is actually on an ADSL line...

(available from my shop obviously)


2026-07-28

Time for something new...

Latest project is a time server.

So why? Well, they exist - you can buy a really nice LeoNTP server, with impressive specs. We see response times of 0.1ms, and it claims 100,000 requests a second. They also have a PPS output, and can do a calibrated 10MHz output apparently (I can't do that).

Can I get close using an ESP32? Well, sort of.

Challenges

It should be simple, in theory - a GPS module, capture CPU cycle count on PPS interrupt and use to get clock rate. Capture NMEA to get time for PPS. Capture cycle count on NTP packet and use reference cycle count, clock rate, and reference time to know exact time of day to fill in NTP reply. yay!

Of course it is never entirely that simple. I did all this and got a working system, but I could do better. My latency as measured on a FireBrick was 2.5ms. I did averaging of the PPS intervals to get a more consistent clock rate, and often the standard deviation on that was below 10ns! But not always. I then did a best of last 5 seconds in terms of a PPS interval to use as a reference - that way the odd delayed interrupt had no impact. That seems to work.

One thing I wanted was PPS interrupt at higher priority than Ethernet, but all GPIOs on an ESP32 are the same interrupt source. Bugger. Do a search and you see plenty of people pissed off about this. I found a fix, make the PPS a PCNT (Pulse count) which has an interrupt (count to 1) which can be set separately to the Ethernet interrupt. There is a trick to remember.

The hardware

The PCB design is not that hard now I have cracked Ethernet. A main PCB, with USB-C, DC input, PoE, and Ethernet.

I have since made an even more compact design.

This then connects to a GPS module, which you can hang out the window (or better, fit in a Stevenson screen). Link with 5 core cable (solid cat5 is ideal), and it can handle a few metres.


Then put both in a nice 3D printed case. See https://shop.revk.uk/ if you want to buy. £60 not £600!

Making it faster

The fact my response times where around 2.5ms was not ideal. I wanted better, but how.

First bodge was hook in to the Ethernet driver receive code and check for NTP packets as they come in, and do a direct reply. I got latency down to 1ms, yay!

But I can do better :-)

Scrap the Ethernet controller altogether. Write my own custom low latency driver. Dedicate CPU1 to PPS and Ethernet only. My custom driver can...

  • Be reactive only - reply immediately to ARP, ND, and NTP.
  • Being reactive, no need for mutex wrap on access to Ethernet chip.
  • Work in interrupt (yes, nasty, but dedicated CPU) so not task switching.
  • Know state of registers to avoid read-modify-write as used a lot in standard driver code.
  • Do read fifo and write fifo with no clean-up between

And guess what - latency down to 0.1ms - bang on what I wanted. Indeed I have seen 0.077ms even.

Now, the logic is fun - it makes the Ethernet no use for anything but NTP. So I have made it (a) optional, and (b) normal Ethernet for first 2 mins so you can access it via Ethernet if needed (assuming you can control power/PoE to reset).

But once switched to low latency NTP only Ethernet, you have to use the WiFi for any access, management, MQTT, and so on.

Bugs

I found bugs in the Ethernet chip (KSZ8851SNL) which does not check IPv6 UDP checksums correctly!

I also found it almost impossible to convince the Ethernet chip to give me unicast, multicast, and broadcast packets - in spite of a lot of reading the data sheet and trial and error. It is now in promiscuous and relying on the switch to protect it. Even that makes no sense - you have to set "Allow any packet" and "Invert the input filter" which to mean means "allow no packets!". I may yet find a working setting. I have already spent a day on this.

I also found it used edge triggered interrupt with a check in task for ISR set as well on timer, I changed to level triggered and that seems to work without hanging.

I also found it nearly impossible to cleanly decommission the Ethernet driver in ESP IDF. I managed to take over interrupts and kill the task, and that was all. Anything more thorough was a nightmare. But that works.

What is it good for?

Well some people are putting in the UK NTP pool, it seems to meet the requirements well and work at a level similar to the rest of the pool.

But it is mainly aimed as being the main server in any business / office. Include with your pool NTP, but being local it will win.

I do not get close to even 10,000 requests a second, more like 5,000, but that is not needed for a typical business, even a large one.

2026-07-14

Shipping to EU from UK

We are selling some stuff to EU, and all over the world now (see shop.revk.uk).

This is all a bit new to us, as we have traditionally only dealt with UK customers. This started with circuit boards stocked at Amazon, and Amazon just sorted the EU VAT (paying us the VAT exclusive amount as an export) for sales in EU - very slick.

Moving on (after Amazon screwed us over) we started selling on Tindie, and Tindie do not do anything special for EU at all. So all our parcels hit customs, and the recipient had to pay VAT (and admin fee). This is the default if you do nothing special when shipping to EU.

However, when Tindie screwed up badly (will they ever recover?) we started selling on Lectronz. I have to say that they have been great. This led us to start to understand how it should be done.

IOSS

The Import One Stop Shop system in EU means we could get an IOSS number for sending small packages (value up to €150) to EU with VAT paid - this means the customer has a much quicker and more seamless delivery with no hassle from customs. We would have to file returns for this, but pay in one go for all EU.

However, it is even easier when using an on-line marketplace like Lectronz, as they handle all the VAT - working out the right rate and charging the customer and paying the VAT. All we have to do is quote their IOSS number as part of shipping.

We integrated the Lectronz API and the Royal Mail Pro Shipping API so staff can just click "print postage" and out pops the postage label and customs label, simple.

The EU has gone to some effort to make this slick and easy for small parcels going in to the EU. Well done EU.

The new €3 duty

As of 1st of July the EU made things difficult - the exact opposite of the slick and easy IOSS process - adding a new €3 import duty on small parcels value up to €150. This is separate from IOSS, so even with IOSS and prepaid VAT, the recipient gets hassled by customs for €3 duty!

Lectronz moved quickly, and added the feature to their systems to work out the €3 duty, and add to the price, to pay us, so we can post "Duty Paid". I updated the API code and set to send duty paid via Royal Mail Pro Shipping API.

Yay, all sorted, all slick again, albeit €3 more expensive for the customer (thanks EU!).

Well no!

This started off OK, with a few parcels, but then we hit an error where Royal Mail will not do Duty Paid to Latvia. Arg, why not? Lectronz were very helpful sorting a refund of €3 so we send not duty paid and explained to customer.

So I decided to check the rate card from Royal Mail. The rates to EU are a mess anyway - they have a base price and per-kg price. The base price ranges from £4.45 to £7.70 which is not too mad, but the per-kg ranges from £0.80 to £10.85 which is mental.

The surprise is that duty paid is not available for Belgium, Bulgaria, Croatia, Czechia, Denmark, Estonia, Finland, Greece, Hungary, Italy, Latvia, Lithuania, Poland, Romania, Slovakia, Slovenia, and even Spain.

This is crazy - with all EU countries charging this new €3 duty - why the hell do Royal Mail not handle this.

The other oddity is that the extra cost for sending duty paid, where possible, varies wildly - from a more reasonable 50p to nearly £5 in one case. It is daft for a customer to pay an extra £5 to handle a €3 duty.

What have I done about it?

I have done a shipping rate for all Europe countries individually. Yes, tedious.

Where duty paid postage is available I have listed that (with the extra cost) so customers have a choice.

It would help if Lectronz allowed me to code a per-kg rate for some countries - I have asked.

We still do IOSS for EU where applicable.

So yes, sorted for now. And it means a sting of countries have the hassle of paying duty on receipt, and a few others make sense to do that anyway as the extra cost is daft.

Update

And today we have...

  • Shipment to Romania saying IOSS not allowed, but we have shipped to Romania with IOSS before, and it is on the rate card.
  • Shipment to Germany with no IOSS and no duty paid, a simple DDU but over €150 and they say NDX not allowed. Well NDX is simple "non document". We tried HV which is "Non documented high value" in case over €150 was the issue, but still says NDX not allowed (yes, I checked the JSON, we set HV).

Arrrrg!

Update

Now seems there is a PDDP with non PDDP service to do the €3 duty and IOSS at once somehow. Trying to make sense of what Royal Mail have sent. If so, it may be simple, but this is mental.

Update

Nope, they sent me a link to a document saying MP7 (DDU normally) with DDP and IOSS is available, but an email saying MPR (DDP but only to some EU countries), but then sent the original PDF again which says MP7 and DDP.

They clearly have no clue!!!

2026-06-28

That CO alarm is giving me a headache

OK, yes that is an old joke, but I do have a slight mystery over the CO alarm.

This first happened last year, and drove me round the bend. A chirp every 49 seconds. This is normally a smoke alarm with low battery.

The problem is that we have 8 alarms in the house, and trying to work out which is chirping is not as easy as it sounds, especially when it is 2am, as it always is with these tings.

I actually ended up replacing every battery and still had a chirp. I then remembered there is a smoke alarm in the loft, and replaced that, only then to realise it was the CO alarm  in the loft! I went to replace that and found it is mains only, and Ei3018 CO alarm. Annoyingly it continued to chirp for some time once removed from the power.

I actually ended up buying a new one, and has been fine for over a year.

Then this week, it happens again. Thankfully I remember the loft this time. What is extra odd is that when I opened the loft hatch, the chirping stopped!

The next night it started again and did not stop. So I removed it, and waited. I put back in place next day.

The next night it started again, so removed, and new one ordered.

But I decided to actually read the manual, and it is odd.

It did not alarm!

Now, a key thing here is, it did not alarm. I would know, I have been in the house all the time, it is linked to all the other alarms, and to a relay input to my alarm/monitoring system as well. It did not do an alarm, honest.

But the manual says it has a memory mode, where, for 24 hours after an alarm, it will chirp. There is however a problem with this.

  1. It had not alarmed!
  2. It stopped chirping when I opened the loft hatch, so was clearly not doing a 24 hour chirp.
  3. It is a single chirp - the manual explains it does 2 or 3 chirps, etc, for different types of alarm.

However, reading further, the manual does have a single chirp every 48 seconds. This is for "AC mains off or low battery backup", or (with green LED) low battery backup. I do not think it had an LED on.

So it does indeed sounds like the backup battery is depleted and the action is "replace alarm".

But this is just over a year for a device that should last over 10 years, arrrg!

I wonder why?

Taxing home internet

There seems to be a proposal to change TV licensing to a tax on home internet! Thanks to this article from ISP review. I hope it goes nowhe...