Episode: 2173 Title: HPR2173: Driving a Blinkt! as an IoT device Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2173/hpr2173.mp3 Transcribed: 2025-10-18 15:17:31 --- This is HPR episode 2,173 entitled Driving a Blinked, and an EOT device. It is hosted by Dave Morris and is about 39 minutes long. The summary is, I have a Raspberry Pi nearer with a blinked. HLEDRA I'm setting up an notification device. This episode of HPR is brought to you by an honesthost.com. At 15% discount on all shared hosting with the offer code HPR15, that's HPR15. Better web hosting that's honest and fair at An Honesthost.com. Hi everyone, this is Dave Morris. I've got a project I want to tell you about. It's a slightly rambly project. It's probably the best way to put it. I'll be messing around with it for a month or two now and I thought I'd better capture what I've done so far. Otherwise it's going to just fiddle around with it. I'm going to fiddle around with it forever and never get around to say anything. So it's based around a Raspberry Pi 0 and I bought one of these when they first came out in December 2015. And it wasn't easy to get them because they were very scarce but I managed to get one. I also bought a case at the same time. I like to buy quite a lot of my Pi stuff from the Pimeroni company. That's how they pronounce it. Not Pi Meroni. Pimeroni. I do believe. I got some 40 pin headers because there's nothing on the Pi 0 by default. So you have to solder it yourself. So I got this. Didn't really have a tremendous number of ideas what to do with it. And I decided to grab a device which came out a bit later called the blinked. I don't like the name actually. It's B-L-I-N-K-T exclamation mark. It's a very strange thing to say. But anyway, it's a device which you plug onto the GPIO pins. It's got eight RGB LEDs on it and which are quite powerful, quite bright. And it costs £5 which is just a little more than the 0 itself. So the plan was to turn them into some sort of status indicator so I could be alerted to things that needed my attention. Eight things anyway. So I've called this talk this episode driving a blinked as an IOT device. So I'm going to come on to the IOT which is internet of things. It's not really internet of things I'm doing. It's more intranet of thing but because there's only was only one thing and it's not. And it's just on my local network. But anyway, enough of that. So let's talk about the setup of the Pi first of all. So I wanted to take the Pi because it's really, really tiny the the Pi zero. I'm sure you know. I've got a photo in here. Anyway, if you're not quite clear what it looks like. And I wanted to put the zero into some device where I could have lights coming up and put labels alongside them to say what they meant. And I could easily determine how important things were and that type of thing. So what I did was was in IKEA and I noticed they have a series of picture frames which in the range called ribber I assume you say same. But anyway, RI double BA. I've linked to it in the notes. I thought I'd use that because it's quite deep or deep enough. It's I've given the dimensions. It's 12.5 centimeters by 17.4 and it's 3.4 centimeters deep. And it's got an internal size of 10 by 15 centimeters. It has a silver finish to when I picked up which is not the most lovely thing. It's a bit garish but whatever. It's got glass in it and then behind that there's a piece of hard board. I realized that hard board is a UK term. It's high density fiber board I think it's called in the USA. It's sort of thing used for the backings of photos and that type of stuff. I'd also got a fixture for hanging it and thing for standing it which I took off pretty quickly. So what I wanted to do was to mount the zero behind the hard board. I drill holes in it so that the blinked lights would shine through it. And I wanted the zero in its case to be held on on the back of it. I kept wondering what was the best way of doing this. I had ideas of using a big chunk of MDF the right size and scooping out a hollow into it to put the pie. But I don't have the tools to do that really. There's no way I wanted to be chiseling away at MDF. It's horrible material to use. And so I went with this. Now the pimmerony case that I've got is the early model and the way they built this was to it's pretty much the same size as the pie zero and the bolts hold it together go through the board. And as a consequence the bolts that you get with it are size M2.5 which is quite an unusual size I find. I don't see it very often. Certainly not in the big box hardware stores around here. Their later case is slightly bigger and the bolts go through outside the periphery of the case. Outside the periphery of the board I mean and they've used M3 bolts which are far more easily obtained. Anyway I managed to find a source of M2.5 20 millimeter nylon bolts to do this job. With the help of pimmerony I should say they I was I asked them questions about what sizes these were and they and said I've had difficulty finding anything and they pointed out somebody selling them on eBay which I then went and bought. So they're amazingly helpful people. So what I did was I made a design in ink scape which I could use first of all as a template for drilling the holes in this board and then I could use the same thing or a similar thing a fresh piece of paper not the one with the holes drilled in it and I could put labels on it and the fact that it'd be a sheet of paper over the holes in the hard board would mean that it would act as a diffuser making it slightly less bright which I thought was a good idea actually. It also would hide the horrible holes I drilled in this hard board because it's not nice material to work with and obviously it's got room for the bits of text and so on. I found that getting everything in the right position in the template under ink scape was quite difficult because I'm a bit of a newbie with ink scape but I've certainly learnt a lot along the way. I've shared the SVG file with this show if in case you want to mess around with it or look at it or anything. Probably not relevant to you unless you've got all the same components that I have but whatever. So I've got some pictures here of what I came up with. The first one is of the the pie itself in its case. It's not got all the bolts in because I've taken it out of the frame to do this picture. It's on and one of the LEDs is on. Number six is on and the camera had some difficulties with that. Got a little bit upset as to how bright it was. I've shown the pie fixed to the back of the hard board which has got a glossy black background to it and you'll see you might be able to see from there that the the blinked LEDs are just held pressed against the holes. So they're pretty well lined up not perfectly but they're not bad. There's another picture of it from a better angle. You can see the back of the hard board looks pretty scabby because I ripped off the hanging attachments but you can see the pie and it's bolted through. Now to the left of the pie there's a couple of bits of hardwood which I cut off the stand bit that I'd ripped off and I needed them because the whole face of the pie is not level because it's a it's level across the case and then the blinked sits on top effectively of the case over the GPIO. So I put these in a shims to level it all out and that took a little bit of filling around. Since I took this picture I actually drilled holes in the in the shims so I could line them up with the bolts. There's a picture of the front face of this hardboard looking messy. I stuck the template on it and then couldn't get it off again so you can see there's bits of template all over it but doesn't matter because it's going to be covered up and then there's a picture of the the whole stuff in the picture frame. I made a little wire holding doodad. I didn't want to use the little tabs that came as part of the frame because they're so fiddly to open and close so my little bit of wire a little bit longer than the width of the case holded in effectively enough. I drilled a hole through the case to do this and drilling through this stuff is a nightmare because it's it's MDF and it's just it's really hard to get clean holes through it and you see the bed duct tape stuck over the the tattiness of the hole and I would not have put the hole there if I'd realized the way I was going to do it but anyway whatever next one will be not much much nicer. There's ever a next one. Finally then the picture says there's a picture with showing the front of this thing with all its legends and stuff and a wonderful reflection of the camera taking it because the light wasn't perfect when I did this. Anyway enough of that that was the setup of the device so I didn't say that the pie has a wireless dongle in it so all it needs is a power lead. So this blinked device is quite well documented on the pimmerony site. There's loads of hints and tips on how to use it and there's a lot of test python code which you can get from there from by following links on their site and they they point to their GitHub repository where all the code is so that's pretty good it you can mess around it. I'm not much for python user. I must admit to being a little bit un-inthusiastic about python because it just with my background in programming such as it is. Python doesn't feel right to me with all this indentation nonsense but this is just a sort of fixed stance that my brain has wanted to take so many trying to stop myself doing this. So pythons are way to go I think with this. So while I was preparing these notes I remembered that I had been a bit bothered about the way the the pie with rasbian is set up with regard to security. As you you can figure up your SD card and and so on and so forth you end up with a username of pypy and it has the default password of raspberry. Well that's all fine and wonderful but there's a lot of stuff that assumes that you he left this as it is and the way this account is is set up it's it can run pseudo without a password so it's effectively a root account to all intents and purposes and the password is well known it's known by everybody's ever touched or by. So this ain't secure to my mind as somebody who used to work in a university where we were quite fussy about security because we were being attacked by our students all the time then this really upsets me. So what I normally do is I disable this account and change its password or something I haven't actually deleted it in any instance because I'm not sure how many things actually rely on it but I make sure it's pretty well locked away and I also take it out of the etc. pseudo as file using a vi pseudo to to edit it and disable its pseudo access then I create an account for myself which are normally called Dave and I give it a much more complicated password managing them with key pass x is what I use for my password safe then I give it pseudo access but I have I want a password to be provided via account's password obviously. So when you use the blinked then the software assumes that in order to get access to the GPIO to write to it and change the LEDs and stuff you need to run as a route and this is because the device driver that runs the GPIO works through the proc file system I don't think it is but it's all devices are mapped to pseudo files and directories in Linux and when you look at slash sys slash class slash GPIO for example the directory that that manages all this you find that they're owned by user root and group GPIO. So I looked for ways in which I could use the GPIO without using pseudo for everything because it just gets really messy or you take away all the security and let anybody do it which I also find wrong. I didn't find a clear answer how to do this I looked and looked and looked nobody seemed to have come up with a very simplest simple and easily implemented way of doing this which is a bit surprising. When I was tackling a project with a pie a while ago I did a show on this making a print server, cups print server and scanner driver on a pie. I remember I had to give the account access to a particular group. I've got what it was now but it's in the documentation. So I thought I could probably do the same thing here so I gave user Dave access to the GPIO group which is done through the user mod command, user mod space hyphen capital G space GPIO in lowercase space then the account name Dave and when I done that I found I could use the GPIO without any problems. Now I wish this was more clearly document and maybe it is now it was a month or two that I looked ago that I looked at this maybe it's better now and maybe it's coming because I think people are generally commenting on this. I've heard other people saying that this whole business of pie and raspberry is too insecure. Anyway whatever I think people should be made aware of this and the process of learning use of raspberry pie should include some basic security practices and so on. People should understand the issues a little bit better than they do. I did note here in the in the long notes and of course there's long notes here which I usually forget to say but you probably have worked that out of yourself. The user pie PI also has GPIO membership and I demonstrated this by using the command id space pie which returns all the all the group UIDGID and group membership of a given user. I pipe that into a command fold which comes pre-installed on raspberry and which is a thing which lets you wrap long lines. If I didn't do that then this would all come out in one very long line and the markdown system I use here would get upset about it you wouldn't be able to read it. After that digression let's talk about how how I wanted to use this communications device, this notification device. So here it is sitting on a shelf. I'm sitting at my workstation here with my main desktop machine and it's an IKEA computer desk which has a sort of arch thing over the monitor. It's going to go actually. I'm going to chop that and build something better but for the moment there's a sort of shelfy thing on which this picture frame exists and there's plugged into it and nearby outlet. So how do I tell it to turn on a light? What's the question? So I know that there are scripts I can run on the zero that will switch the LED's on and often change color and so forth but I wanted to communicate with it from other machines. I didn't want to... I knew I could have written something where I wrote something that listened on a port and took commands and did things but I didn't really want to be writing my own remote control infrastructure so I looked around to see what else was possible knowing that there must be tons of stuff. First thing I came upon having listened to a recent episode of Changelog podcast was a queuing system called ZeroMQ. I've heard about that before. I looked at it and actually bought the book because I can see possibilities for using it but it seemed like overkill for this one. It's a very sort of enterprise level tool and quite complex. So I next looked at MQTT. Now MQTT I'd heard about at OgCamp 2012 there was a talk and this is a protocol which is being used in Internet of Things stuff I believe. I don't know of any instances where it is but I'm told that that's the case. There's an implementation of the MQTT protocol in a system called Mosquito 2Ts MOSQI TTO. There's links to all of this stuff in the notes. I've seen it but it's easy to install Mosquito server and clients on the Pi Zero and it's just it was just an app getting install Mosquito and Mosquito hyphen clients. So I got the server and clients. The server was already set up to run at boot time and there's a service command I think which lets me mess around with it. I haven't done much messing with it. It just runs. The clients that I got consist of the commands Mosquito underscore sub and Mosquito underscore pub. So let's talk about what MQTT does. The design is based around a so-called published subscriber pub sub model. This requires a message broker whose job it is to take messages from or receive messages from a publisher and pass them to a subscriber. It knows which messages to send where by filtering them and it bases it's filtering on an attribute called a topic. So messages have topics. There are things that send them, his message and it's got this topic. There are things the subscribers that listen to them, listen for them and they say I'm here to get messages with this particular topic. There's nothing to stop you having publishers that publish stuff and there's nobody listening. It'll just be thrown away. So it's all quite simple and lightweight. So a typical case might be a publisher. You might have a temperature sensor, an intelligent temperature sensor that can send IP messages or you might have a doorbell which when pressed sends an IP message using this protocol and the subscriber might be something controlling the heating system which is listening for temperature messages or you might have an audio or visual alert system receiving the doorbell messages and doing something with them. So that's you probably hear where all this stuff. That's the sort of model that the internet of things is using. The only thing it though is that in many cases the intermediary for all of this, the message transport level, the stuff that's doing the messaging is not local to you. It's on the internet somewhere. So if you've got a cloud, you've got a nest thermostat then it's talking to the nest service as far as I'm aware and if you've got a, is it Philips Hue light, the ones that you can control over the internet, then they're receiving commands from their base on the internet. So the Mosquito broker then is an MQTT message broker, the server I was talking about earlier on. And the commands Mosquito Pub and Mosquito Sub are examples of a publisher and a subscriber. Now at the Python level there's a library called PAHOMQTT PAHO hyphen MQTT which you can use to write scripts and I've given example how you could install it using PIP, PIP install PAHOMQTT running under pseudo. So in the Pimironi examples they provide an example script which they call MQTT.py which demonstrates the use of this library which is pretty wonderful. So I took this and modified it to make a first version of a listener, a subscriber script. I renamed it blinked underscore client.py and there's a version available with this show if you want to look at it. It's a temporary, it's a sort of in development script so don't take it as definitive in any way. You're welcome to do whatever you want with it, a similar way to the Pimironi thing I'm sure. Anyway I modified it to connect to localhost because I'm running it on py0 and that's where the Mosquito broker is running. So it's a subscriber, it's an MQTT subscriber and it's sitting there listening for messages. I left the topic as it was in the original script and it was Pimironi slash blinked. I don't know what yeah there's a hierarchy of naming in the topic with it's a bit like a file path. So Pimironi slash blinked and you can actually specify topics as Pimironi slash asterisk to get everything which is under the prefix Pimironi I think. But I've not really delved into this much. You can read up more about this if you want to from the various links that I've put in the notes. The standard port that's used is 1883 and I've just continued with that for the moment. So this script runs in the background on thepy0. So I just simply added a crontab entry which starts it up when the pie is rebooted. I don't know if you know but in a crontab file there's an entry you can put which starts at sign reboot space and then the path to the script which in my case is dollar home, capitals in the capital letters slash blinktie underscore client.py with an ampersand on the end. So at reboot it will fire this thing up and just leave it running in the background forever. So the script which is this adaptation as I said uses the same methods as the original Pimironi design and it expects messages which contain strings which have the form RGB comma and then a number for the pixel then comma then three numbers separated by commas which represent the RGB color values decimal numbers. So RGB comma 1 comma 255 comma 0 comma 255 is specifying that you want LED number 1 they start from 0 to have a red value of 255 which is full intensity red a green value of 0 no green at all and a blue value of 255. This is an 8-bit value in each case because it's actually a hex a six digit hex string with the other way of looking at it. So that will set it to that color combination. There's also a CLR message which will clear all the LEDs on the blinkt. They've all still carried over the algorithm which if the pixel value is an asterisk then all pixels are set to that particular color. I'm going to change this but that's what it's doing at the moment. So I've got a mechanism then on the pie zero where I can tell it to switch on a light or switch off a light whatever any of the LEDs can be turned on or off. So I then came up with the first publisher. What I've been doing before this was I've been running a pair of scripts on my desktop machine and these helped me with the process of moderating comments on the HPR website. I've taken that job on from Ken to he's got enough on his plate and so I just need to keep an eye out when a new comment comes in which I either go and look at the website to see is there anything new or I run this script. So the original one was a bash script which was run from cron every 15 minutes. I called this cron job underscore comments. All my cron called scripts I start with cron job just to make it clear what they are. It's included in the with this episode. It runs a purl script which I called scrape underscore comments which goes to a particular page on the HPR website and detect if there are any new comments which require attention. This this page is available to you. I won't share the scrape comments script at the moment anyway but on this page there's quite a lot of statistics. I haven't actually noted what it is. I should maybe add this to the to the notes but on it there's a line that says comments requiring attention or something. It's followed by a number. So I simply look for that and pick up the number. So it runs this scrape script the purl script. If it finds anything it returns or whatever it does it returns a number saying how many comments need attention so it can be zero or any any other number. So if it's non zero then I simply in the bash script call mosquito underscore pub and I tell it that the topic is pymirony slash blinked and the message is one of these RGB blah blah blah thing. So you see here it says there's an example of it here RGB comma dollar LED comma 255 comma 255 comma zero. So that set that switches on the red and the green colors on the LED nominated by whatever the value of dollar LED is. So that sends a message. So this is running on the pi zero I didn't to say that and it sends a message to the MQTT broker and causes that LED to show a yellowish color to yellowish because it's not very clear yellow but then it's a combination of two LEDs. If there's nothing to do then it does an equivalent mosquito pub command where it sets all the RGB values to zero and turns the pixel off. So that's what I have at the moment that is a thing that running on the pi zero it's looking at the website and it's setting LED one actually to this yellow color and that says there's work to be done I go and do the work it then looks again in 15 minutes and says oh there's nothing to do now so it turns the light off again so it's pretty simple but it's some it's fun. So what I want to do with the the listener script so far is to smarten it up quite a lot I probably change the interface but have something quite similar because it's a nice idea I look the way it's signed. I'd very much like to be able to blink one of these lights and maybe just change color briefly and then revert to the previous color or to flash it on and off and so on but there's quite a lot of issues around that that need some need some further work so I might do another show about this if I once I once I've got that done at the moment I've got something that works so I'm happy about that so how else am I using this notification system now that I've got it I've got another mechanism where when a new HBR show appears then I am alerted and I've mentioned this before in the context of the blink stick I'm all into indicator lights all of the plays show number 1971 I talked about building the blink stick and what I'm using it for so I've got a thing which another crown job script that runs every 30 minutes and it scrapes the the website the main website that shows the queue and notices if there are any new shows being in the state being processed and if there are and that particular show number has not yet been processed locally because this this thing also looks at what I've done as a consequence of noticing these things it will it turns the blink stick on red but I added a added code to it to also switch on light zero on the blinked on the pie zero and when I dealt with that particular thing what I do is I grab the show notes from the shows and process them and turn them into HTML for adding to the show and once I've done that then the code that's looking at this script notices that I've done the necessary work and turns the lights off turns the blinked blink stick and the blinked off so that's first thing I am using but I'm going to phase out the blink stick in this context to think and use the the nice notification thingy instead so I've recently added a male notification thing to it I use thunderbird to handle my male on my desktop and I've got a bunch of male accounts which it connects to and pulls stuff down there's loads of filters in thunderbird to move incoming male into folders or chuck it into the spam bucket whatever in particular I've got an add-on a thunderbird add-on called male box alert which can do things to alert me to important male that needs particular attention so this thing can do various actions when male arrives in a folder so this is not just male who arrive in the inbox is male being filtered from the inbox into a folder and so I've got sounds which I've grabbed off the free sound org site and edited down something more manageable and so on I've got pop-up displays and that type of thing my box alert tool can also run a script so I've written one just a simple bash script which uses mosquito pub to make led6 on the pi0 system to engreen and a moment this is just running when I get messages from my son they get dropped into into the appropriate folder and the light comes on so so how do I turn the light off again obviously I can turn it off manually remotely as well by using the mosquito pub come on but I want to be able to do it automatically at the moment I'm working on a script which goes and checks a mailbox because a male folder a male folder as you'd say a male folder which is that's a male concept it's actually a file and it's a file containing male in a standard format called inbox format so I've got tools which which I which I can pass this with a pulse script so I'm experimenting with this it passes the mailbox file and it scans it to see if there are any unseen messages in and since when I go and check see what the message was about it turns from unseen to to read then this can detect it and if it says that if it finds there's no unread messages in them the mailbox it will turn the light off and that couldn't be run from cron it's not at the moment and finished it it's also fairly heavy because if there's a lot of messages in the folder it's going to have to pause them all to find out which one is which ones are read or unread so if you've got thousands messages that's not really a very good solution there isn't anything else that I know of it obviously there's an event in thunderbird which will be triggered when a message goes from unread to read but that doesn't seem to be hookable in any in any sin if I were running some other male system maybe something like mutt and maybe there are better ways of writing hooks for these events I've certainly used male systems in the past where I have written hooks into the the male client to enable me to do these sorts of things but that was going back two days long ago I think I've got a plan for an IRC notify but I haven't started on that yet I use wechat to to contact IRC IRC client and it has got some quite powerful plug-in capabilities so state changes in there can be can cause events to happen the wechat running on another pie and I'm looking at the possibility of writing a plug-in which with which I can use a mosquito pub type call and with that switch on my light on the notification system to say somebody yes just spoken to you in IRC because it would be nice if I if if I had the ability to blink the light I could you know there would hold dash of these things coming in and I could flash it according to the number that were there whatever that's some project for the future so that's nearly all I have to say about this particular project except that cause I got into muskito a bit I've also installed it on my desktop which obviously I had to do in order to be able to talk to the pie zero and it occurred to me I could write another listener on there and use it to interface to the blink stick which is plugged into the the desktop is plugged into a usb hub connected to the desktop machine so I found some work that had been done on the blink stick website which I've pointed to it's a moderately old thing it's dated 2013 this protocol has been around for a while I'm using this as a development platform for my python ideas and also get better into python scripting the original script needed some changes because the way the python library works and what it's called and stuff have changed in the interim so what I'm doing here it's just a silly thing really every 30 minutes on the pie zero a cron job runs which calls muskito pub and sends a message to the desktop assuming dead up on the desktop it's not on all day not all night anyway not on 24 hours of turn it off and on in the morning so all it does is every 30 minutes it flashes the blink stick and it that's just because I want to be sure that the pie zero is up and running and doing everything it should what I should really do is to have maybe some means of seeing the the on light on the the thing you can't see it because it's inside this frame but I need some sort of indicated to say I'm alive and well and this was a solution that I came up with it's really just a temporary hack that I can use the reason I wanted to do this because I found in the early days the zero would occasionally vanish from the wi-fi network and I'm not sure if that's an issue with my router or what it is the moment I'm getting a light flashing every 30 minutes and that's that's working fine I'm happy with that and it's also give me a chance to play with the the listener on the workstation and I can try developing blinky things on that and so on and so forth so just to wind up I don't have a lot of interest in the internet of things when it means paying a lot of money for special light bulbs and temperatures sensors and all that sort of stuff and it requires internet access and a remote server etc etc but I'm quite excited about doing this at the level and I've just been describing things where I have full control over it all I found that this MQTT protocol in the shape of the Mosquito server is really nice to set up and simple and has great potential for building into communicating system since the zero is running 24-7 I have to admit that on the odd occasions I've got up in the middle of the night for whatever reason come down stairs to find a glowing yellow light it'd be even worse it was flashing probably I see the new there's a new HPR comment has arrived in while I was asleep it's slightly eerie but it's also quite cool I should say I don't action at that point I haven't put all these various odds and ends of code up on the get repository like I normally do what I'll do is once I've got something I I'm happy with I will share them but to share you know stuff that's in very much in the state of flux doesn't seem to be entirely a good thing final point was that when I started doing this stuff and I was messing started messing with Mosquito and MQTT I noticed that Jezra had started something he mentioned it on Gnosocial and I was asked him about what he was doing and I've indicated he's I've linked to his project where he built a rather nice looking light which is um controllable through the MQTT protocol from his phone I think he ended up doing but check it out for yourself he's a much more experienced Python programmer than I am so if you're interested in doing any of this stuff yourself you'd be you'd do well to kind of look and see what Jezra has done so you could learn from from his his stuff as can I of course so thank you Jezra for making it available so that's it I hope you found that useful and not too long okay bye now you've been listening to Heka Public Radio at Heka Public Radio dot org we are a community podcast network that releases shows every weekday Monday through Friday today's show like all our shows was contributed by an HBR listener like yourself if you ever thought of recording a podcast then click on our contribute link to find out how easy it really is Heka Public Radio was founded by the digital dog pound and the infonomicum computer club and it's part of the binary revolution at binrev.com if you have comments on today's show please email the host directly leave a comment on the website or record a follow-up episode yourself unless otherwise stated today's show is released on the creative comments attribution share a light 3.0 license