The Smart Dragon is born...
I bought a beautiful glass dragon from Conwy Castle last year and it was sitting in a box, far too fragile to put on a shelf with kids around. So I wanted to build an enclosure for it. Given it’s glass, I wanted to both keep it secure and find a way to light it, so I could show off its full beauty. At the same time, I found myself constantly checking my phone to monitor our new solar panel system – the battery levels, solar production, how much energy the house is using – and asking questions like, “is now a good time to put on the dishwasher?”, and so on.
So I wanted a way to convey this information in a subtle way and at a glance whilst containing it in a beautiful object – the smart dragon was born!
How it works
To a visitor, this is simply a fancy base for my glass ornament, but every pixel is programmed to convey information. Technology being used to illuminate art – both literally and metaphorically.
Now it’s super easy to add pretty much any effect for any event in my house, so I’ve added some extra effects for special moments too! The whole thing updates the state of our solar system every 5 seconds and turns off automatically at night.
What you need
- A glass cloche to protect your ornament from accidental bumps
- An offcut piece of 270mm x 270mm walnut for the base
- A WS2802 LED ring array
- An ESP8266 chip
- An LED transformer – I used a 15A 5V one for this project. Probably overkill, but I like to over-engineer such things…
- A piece of diffusing plastic or glass – or you can print mine!
- An enclosure for your ESP8266 chip – or just pinch mine!

- Outer ring (red) – shows the house battery level as a percentage
- Inner ring (blue) – shows the household electricity usage as a percentage
- Remaining inner circle (green) – these show an animated sparkling effect to show the solar production – more sparkles = more solar!
How to build it
Step 1 - Make the base
- Now let’s get that wood looking beautiful as a base. I used a CNC to cut the circle, but this can be just as easily achieved with a jig. There’s also no reason you need to have a circular base – be creative!
- Aim to cut out a deep groove for the glass to rest in, a shallow space for the LEDs to embed and on the underside cut out a slot for the wires and to sit in.

Step 2 - Program that little chip
- I used WLED which is an awesome implementation of a webserver for ESP chips that lets you control LEDs really easily.
- Download the latest copy from https://github.com/Aircoookie/WLED
- Now, it’ll naturally depend on your choice of LEDs, chip and setup a little, but they’ve got great tutorials on the site: https://kno.wled.ge/basics/getting-started/
- The wiring is pretty simple as you can see from the above diagram
Step 3 - Time to get polishing

Now give the wooden base a good sanding – it’ll be tricky to do this after you’ve put all the components together, so now’s the time. Also give it a good finish – I used walnut oil. What else for a nice piece of walnut…. 😉
Step 4 - 3d Print your case and diffuser
- Now print a diffuser for your LEDs (if you want one)
- Also print a case for your ESP8266 to sit in and look neat!
Download mine here

Step 5 - Soldering on...

Next you need to get soldering. I cut each LED ring’s wires and soldered them together to make it a little more neat and have fewer wires. This was incredibly boring, but take your time and do it carefully – you don’t want to short any wires…. like I may have done….! 😉
Then I soldered the wires to the ESP itself and finally connected it all together.
Step 6 - Testing it

All being well, you should now have it all connected and your LEDs are glowing nicely!
This being done, you can move onto your smart integration. I installed the WLED integration into Home Assistant which exposes the WLED instance and lets me easily create an automation that triggers a light effect when a sensor changes.
In my case, my dragon tells me what’s happening with my solar system.
- The outer ring shows the battery level percentage. No leds means 0% battery, 100% means 100% battery.
- The next ring shows the power usage in the house – again the more full the ring, the more power we’re using!
- The centre rings show a fire effect that shows how much energy the solar panels are generating – when it’s dark the fire goes out, when it’s sunny they are furiously glowing!
Wrapping up

You can obviously do anything you want with this, but the beauty is the ornament has been brought to life – it conveys information to you and draws your attention constantly throughout the day, rather than being stuck in some cabinet somewhere.
Technology has brought an inert piece to life….and you’ve just been freed from looking at your dull phone for that information…
Go and make something magical!
Would be great if you could post some code showing how you accomplish this in Home Assitant
Hey Paul, it’s probably better suited to a quick web tutorial, I’m actually building a little members section at the moment, so I might slot it in there!
When you solder all the wires on the LED ring together, is there any special way to do this or just simply each color together? Probably an obvious question but before I ruin this LED ring 🙂
Nope – just connect all the + and GND pins to the power supply in parallel. Only thing to make your life easy is to connect the data pins in the correct series you want (ie to the start of one ring, then connect a wire from the end of one to the start of the next). This will effectively govern what LED is number 1, 2,3….to 272 or however many you have, so as long as you’re consistent here, it’ll make life easier to order them in WLED later.
Thanks Katie!
Awesome piece of work. Thanks for sharing!
Hi Katie,
As mentioned on youtube – I a looking for how you set up the automation. On Youtube you mentioned ESPHome as well – and here you do not. Can you share the automation settings to make it work?
Hey Richard,
Yes, ESPHome is simply to program the esp, so some folks use other approaches – I find it super simple!
Here’s my automation code as an example of how to achieve it:
alias: Dragon LED - Solar Generation
description: ""
mode: single
triggers:
- entity_id:
- sensor.pv_power_2
trigger: state
conditions: []
actions:
- target:
entity_id: number.wled_dragonv2_segment_2_intensity
data:
value: >-
{{ ( 255 * [states('sensor.pv_power_2') | float(0) , 7000] | min /
7000) | round(0) |int(0) }}
action: number.set_value
Shout if any questions!