Sunday, 6 January 2019

A little automation…

Okay, so a bit of time has passed, and my room has just a little bit of automation going on…  Nothing particularly impressive, and still so much to do, but piece by piece…

Firstly, there's a Sonoff Wifi switch on the bed-side lamp.  It's hooked up to a rather crappy Python automation script, but it is none the less "automated", somewhat.  However, as I wasn't able to find an API for the Sonoff, and I haven't yet been brave enough to try re-flashing it with something like Tasmota, the only way I could find to control it was to use IFTTT as an intermediary — so a quick bash script lets me turn it on or off, issuing web requests to IFTTT, which in turn communicates with the device's server, and then back down to the device — that's probably quite literally doing a lap around the globe, just to send a simple on/off signal about 1.5m.  It's on the list of things to fix.

Also, several months back I pulled out a 1m strip of RGB LED's — 60 5V APA102C's — which I've had for about a year, but hadn't taken out of their sealed package.  Hooked those up to an EtherTen (Arduino Uno, with built in Ethernet from Freetronics), and laid the strip along underneath my monitors.  Right now as I type this sentence, it's displaying a fairly standard sweeping dot sequence.  These are nice LED's, because they're 4-wire SPI-style, but… they don't do dim.  At all.  You try to dim them past about medium, and they just get annoyingly flickery, and any colour other than pure red, green, or blue, breaks down — as it is in the sweep pattern, when it's showing a non-pure colour, you get pixels in the tail that are showing just one of the component colours, making it stand out occasionally, albeit briefly with the relatively fast fade.

Initially, it was a regular Arduino Uno, running a simple demo program that cycled through a set of demo patterns.  But I decided I wanted control over it, so it was fairly quickly swapped for the EtherTen with a very crude web server.  This allowed me to manually change the pattern, brightness, and I'd added the ability to turn it on and off (fading in and out).  That was then followed quickly by a Raspberry Pi, and the introduction of MQTT, with a cron script bumping the pattern every 10 minutes.  The MQTT server offers a very basic web server, which allowed the creation of a basic web interface — you can find plenty of examples of doing so online, which was an excellent way to get started.  Up to this point, it's mostly just running example and tutorial code off the web.

But then, as always, I decided to make it my own — it's undergone major reworking since, as I struggled against the tight confines of the Uno core (32KB Program, 2KB RAM), while also adding extra features like being able to reserve LED's from either end and set them independent of the running pattern, as a means to show indicators.  There's also a pixel clock overlaid on top of the pattern — red dot for hours, green dot for minutes, and blue dot for seconds.  So the basic set of patterns (there's a couple extras of my own), are still mostly the code you see all over the place, but I've tweaked some of them a little, plus I had to re-work them all a little to support the indicator feature (the pattern down-sizes to fit the unreserved space).  The rest of the code, however, has been ripped out and replaced utterly.  There's more I want to do yet, starting with replacing the current hue shifting, with colour palettes — the stock ones, a couple extras of my own, and support for a custom — and expanding the indicator support to add fading (ran out of space to implement that).  Though that's on the back-burner at the moment, it works, and there's other things that need doing.

Speaking of which, as I said, it's being driven by a script on a Raspberry Pi running the MQTT server, and I presently control it though script commands over SSH terminal — it's very much still a work in progress.  There's also a script that turns off the light if I leave the house, and turns it back on when I come back, though it needs light level awareness, which is planned to be sourced from my desk clock.  I'm also planning to transition to something like Hass.io on the second R.Pi, and depreciate my rather gruesome and not particularly well meshed Python and bash scripts.

Also coming, I plan to replace having to control it by SSH (or even web, once I decide to sort out Hass.io), with a satellite Arduino Uno (I'll have one spare when I swap the one from my desk clock, with the spare EtherTen), with power and RS-485 data, and maybe an LCD — I haven't used an LCD for anything yet.  There's also the bedroom window — that winder most definitely needs to be automated.  Cue the hunt for an electronic window winder…  To the TODO list…!

No comments:

Post a Comment