Reviving Chumby Classics to connect to Home Assistant

I absolutely love the ability to create weird and wonderful things for smart homes and find it frustrating that many efforts are just about recreating standard things to be smart. This is our chance to get weird people!

I’ve continued down the rabbit hole of my style of smart home and have joined some original Chumby Classics (the beanbag shaped devices from 2008 or so) up to my “Home Assistant” based smart home system.

Much of the Chumby excitement that was pretty great 12 years ago has faded away, but I’m still keen on the little fellas and have 3 of them around my house.

Of course some time ago the company was sold, and things got a little wonky, and though I’m thankful for the people keeping up the online service, I miss the days of things feeling more active and useful, and with the standard firmware there wasn’t really any methods I could link these devices with my Home Assistant.

I found on github that “phineasthecat” has ported the most recent (V34) Zurks offline firmware to be compatible with the Chumby Classic (the official Zurks firmware is only compatible with classic models up to v21). This is great because there were many things introduced after v21, and I personally mostly love the classics with their beanbag shape.

https://github.com/phineasthecat/zurks-offline-firmware-classic

UPDATE: I’ve forked this work into my own repo for now with the changes I’ve outlined below until a time I can hear back about fixing the bugs with the original author, otherwise I’ll just keep working on my fork instead:

https://github.com/JesseCake/zurks-offline-firmware-classic

There are some problems with this firmware though, and it doesn’t work in its current state. I spent yesterday tinkering with it and managed to fix a couple of bugs and make it run on my Chumby Classic. I’ve submitted an issue on github so hopefully that person is still active, otherwise I might fork it and keep developing from there on my own.

If you want to use it, make sure you use a nice fast USB drive as this kind of thing just doesn’t suit $2 sticks. I use Patriot XT usb thumbdrives (unsure if they’re still current, I have a few of them) for this job.

Here are the main 2 issues with the firmware that you can fix yourself to make it run on your chumby classic:

  1. The “tmp” folder is missing, so it won’t work properly. Simply add this folder to the root of your usb
  2. There is an error in the way that it uses a swap file in the startup scripts, so it’ll painfully slowly create the swap, but won’t go on to use it in subsequent reboots. Go to: https://github.com/phineasthecat/zurks-offline-firmware-classic/issues/4 to see how to fix this. You’ll just need to edit the “debugchumby” file with a text editor.

The first boot scripts actually create the swap file. It’s 500MB though and I assume the Chumby Classic is USB v1 because it took so so long to do this job. It was so long that I gave up and created the swap myself onto the thumbdrive using my computer (Linux computer). I used the command from the script to create using a terminal (bash) window (whilst in the directory of the thumbdrive):

dd if=/dev/zero of=./.swap bs=1 count=0 seek=512M

Then when you put it into the chumby, it should speak to you, have no errors, and still take a while to start but will get there. Subsequent reboots will be faster.

Make sure you still follow their directions though, and follow their recommendation on updating the SSL of the chumby base firmware with the provided fix.

Something not explained anywhere is that this offline firmware does not wipe the onboard chumby firmware, and the USB has to remain in the Chumby to keep working. It boots and runs off the thumbdrive as an active filesystem.

So why would I be so keen on this? Well the amazing work of the original firmware hackers has meant that many of the built in functions of the chumby become accessible through a web interface (http://ip.of.your.chumby/index.html) as well as scripts you can directly access to automate it. I’m keen on home automation and use Home Assistant extensively around the house and my workshop. I love making reminders for myself so I don’t get too into projects and forget to feed my ducks or cat, and normal alarm clocks on phones are boring, so I have a megaphone and 1940s industrial bell wake me up.

Now using the html triggered scripts I can have the Chumbys join the fun and they can use text to speech, MP3s stored on the usb drive, as well as visual cues to show me things.

Here’s an example html script already built in to play any kind of remote stream (here playing my favourite internet radio station Shirley and Spinoza) – yes I know I have a weird IP range at home:
http://192.168.8.164/cgi-bin/zmote_play.sh?http://s2.radio.co:80/sec5fa6199/listen

Here’s another where I can make it use built in text to speech to say whatever I need it to:
http://192.168.8.164/cgi-bin/speak.pl?action=say&words=hello%20person

There are heaps of these functions built in, even to turn the screen on and off, change widgets etc etc.

In Home Assistant, you just need to use the RESTful stuff to trigger it (it just needs to access the HTML links to trigger them on the Chumby). I may not be doing this in the most graceful way, but it was late and I was admittedly a few drinks in.. here’s some basics with the black chumby I got working (I also have an espresso coloured one and a grey one):

  1. Add to your configuration.yaml:
    rest_command:
    blackchumby:
    url: “http://192.168.8.164/cgi-bin/{{ urly }}”
  2. reload your core or whole HA (unsure which reloads configuration.yaml)
  3. Create a script named whatever you want (mine will be an alarm that speaks “good morning”, and starts playing my favourite internet radio quietly, but slowly increasing in volume
  4. for the first in the sequence we’ll speak “good morning”:
    call a service: this service will be (from above) “rest_command.blackchumby”
    put in the service data box: urly: “speak.pl?action=say&words=Good%20morning
    the “%20” is a space, I haven’t created a neat way to filter spaces and make them %20 yet
    Here is the raw yaml:
    data:
    urly: “speak.pl?action=say&words=Good%20morning
    service: rest_command.blackchumby
  5. give some delay of a few seconds at least between each command, so we’re not overloading the chumby
  6. do the same kind of call service but with a command of “custom/setvol.sh?25” to set the volume nice and quiet
  7. short delay
  8. do the same kind of call service but with a command of “zmote_play.sh?http://s2.radio.co:80/sec5fa6199/listen” – this will start playing the web radio station using the built in player that can still be controlled on screen
  9. delay of 30 seconds before it gets louder
  10. command of “custom/setvol.sh?50” to get louder
  11. delay of a few minutes before full volume
  12. command of “custom/setvol.sh?100” for full volume

At this point you could manually turn off the stream or if you want something else to stop the music, you could use “zmote_play.sh?stop” – which isn’t actually a stop command, but the file doesn’t exist so it’ll stop playing. I’m sure there’s a more elegant way.

If you want to change the screen brightness there are more scripts and even turning off the light settings, they’re all in the thumbdrive of this firmware under /lighty/cgi-bin/ as well as /lighty/cgi-bin/custom

I recommend checking it all out. Some is a little rough, and I’ve also added my own script to turn the screen on after it’s been off which is just a copy of the off.sh script with a dim level being echoed of 0 instead of 2.

When I go to bed now, I press a button, and along with all of my house lights, my chumbys around the house turn their screens off. I love a completely dark house!

My next steps? I’d love to keep working on this, as development appears to have dropped off a cliff in 2014, but I’m just not sure about the build environment for Chumby – does anyone have any idea of the way these packages were built? I would love to update the built in DLNA server to a later version of the software to allow it to be an endpoint, so that my Home Assistant and devices can stream their music and sounds to it as needed without needing to preload sounds onto their USB, and using other voices, though I do love the TTS voice onboard this firmware (the built in DLNA server has problems with the scripts, but even when started is only able to choose music from a remote server, not be streamed to).

Funny bit of trivia, it sounds like the voice is the same voice as the robot that serves Rick butter in Rick and Morty.

Hit me up if you need any help – I love these these little guys, and think they’re still worth hacking on. I also think we can take them further along with us.

Leave a Reply

Your email address will not be published. Required fields are marked *