I've had a Streamdeck for a while and I love the device, but when I moved to Linux a while ago I couldn't use the native app to control it. While there are some third party open source options, they are not great. Although I did find one recently that was pretty decent called Stream Controller, I wanted to just make my own. Which is a shame because I just made a Crypto plugin for the Stream Controller software.
The official Streamdeck app from Elgato is really nice and includes a ton of built-in modules to support a lot of services. It is mostly focused on streamers, but it still has a lot of useful features. I never really used it to its full ability and mainly used it to track prices, change my music, track if my mic is muted and have an easy button to mute/unmute and a few other basic things. For the most part, I really just used it as a display.
The streamdeck is pretty interesting, it's a touch screen but with 15 clear buttons laid on top so it looks like each button is a screen but it's really just a small display and the buttons touch a specific section of the screen.
While the open source solutions were decent and did most of what I was looking to do, I didn't want to keep making modules for a third party application that most people wouldn't use anyway. So I decided to build my own.
It all started with this 7" touchscreen that is perfect for the project. At $60 shipped, it's very reasonably priced and a lot bigger display area than the Streamdeck, more than 2x larger working area. Even more if you factor in the bezels on the Elgato device.
This screen also has sound, and allows me to attach a Raspberry Pi on the back. I'm currently using an Raspberry Pi 4 2G that I had lying around. It is a bit overkill for this project and a used Pi 3 or even a Pi 2 would probably be more than enough.
The total cost of this project so far would be $60 for the screen, $45 for the Pi, and $10 for the SD card. It is kind of difficult to get a Raspberry Pi without buying a kit unless you live in the UK where you can find them locally. That being said, the total price for this project is $115 USD.
The final project looks like this:
There is the base application I am calling StreamdeckPy and three custom modules.
- Crypto Tracker
- Stock Tracker
- Hive Witness Tracker
Each of these modules follow an class structure so they implement know functions so they provide predictable functions.
Do to Hive's limited availability, I had to implement a split logic for Crypto pricing. For most tickers, I gather information through Binance US api, which is very good, fast, and has a generous free plan. CoinGecko however is very limited and is the only way to reliably get the Hive price but is limited to 10,000 queries/month with or without API key. This means I have to limit it to 5 minute updates where as the Binance US I am updating every 5 seconds.
Each button acts as it's own instance of the Crypto Tracker, and fetches the open price at launch and at 00:00 UTC so it can determine if the price is up or down and color it appropriately.
The stock ticker functions in the same way and uses Finnhub api to stock prices. Finnhub has a very generous free plan as well and is perfect for this application, although you do need an API key.
The Hive Witness Tracker uses standard RPC calls to fetch the witness position for specified witness.
You can see the button config I currently use here.
{
"buttons": [
{
"position": [
0,
0
],
"module": "crypto",
"symbol": "btc",
"color": "white",
"update_frequency": 5
},
{
"position": [
0,
1
],
"module": "crypto",
"symbol": "eth",
"color": "white",
"update_frequency": 5
},
{
"position": [
0,
2
],
"module": "crypto",
"symbol": "hive",
"color": "white",
"update_frequency": 5
},
{
"position": [
0,
4
],
"module": "stock",
"ticker": "SPY",
"color": "white",
"update_frequency": 60,
"api_key": "****************************************"
},
{
"position": [
3,
4
],
"module": "hive_witness",
"witness": "themarkymark",
"color": "white",
"update_frequency": 60
}
]
}
Everything was built to be modular and as if it was a commercial product in case I want to throw it up on Github and share it.
One thing it is missing and I haven't done yet is being able to connect it to my PC to act as a keyboard device so I can control things like muting my microphone and executing commands. I am on the fence if I want to go ahead and do this. Right now it acts as an independent computer with no access to anything that needs additional security.
If I hook it to my computer, I can do things like mute my microphone, launch applications, see what song I am playing, and a number of other things. I will then have to worry about security as the device will have access to my system and it is easy to modify code on the SD card without me knowing easily. As of right now, I think I will leave it the way it is. The only thing I think I will miss is the red/white icon for muting my microphone I really like being able to see when my mic is muted and easily click the button to change it. I use my mic a lot for gaming and a daily market call I do in the AM on weekdays.
I really love the size of this device and the fact I get the full screen real estate to work with. The grid is completely customization, I chose a 5x4 layout but you can set it to any layout you want. There is also a dark/light mode you can choose to adapt to your environment. I will probably add an option to auto change to light mode in the day and dark at night in addition to the Dark/Light options I have now. I'm not sure I'd use it but it would be a nice feature.
I am trying to think of other features I want to implement. One I know I will do is ETH:BTC ratio, I frequently monitor this, and usually use Trading View to keep an eye on it to know when the best time to swap assets is. I also want to add some graphs to the display.
Each button can be clicked and will force an update ahead of schedule. I think I have enough room to have a mini graph at the bottom of the price in each button to show the daily trend, although I wouldn't be able to make it that detailed. I do have a dedicated ultra wide screen above my main monitor running trading view 24/7. It's just a lot less effort to check prices quickly while doing things with this. In the morning, I am usually watching trading view for most of the early hours of the US market.
The entire project is built in Python w/ Tkinker for the UI and only requires the requests module. It probably would even run on a Pi Zero W which is only like $10-$15.
It does currently run under X using Raspberry OS. There are ways to get it to run without X but it would be far more complicated to use a game engine or something similar to deal with the frame buffer directly.
Got any ideas what I can add?

One way you could have it “control” your pc is have code on your computer poll the Pi. That way the pi doesn’t ever have direct access, it would simply be running a tcp or even rest service that offers state info.
That's pretty cool. I have been looking for some small good quality touch screens like that in the past, so I will have to remember this in the future when I need one. I have a streamdeck here in my office, but we really only use it to start and stop OBS studio. I needed something dummy proof to record the board meetings when I am not able to be here.
Just out of curiosity, I wonder if you could provide an estimate of the value of the code. I realize it's FOSS, but that has economic value that just isn't financialized, and instead is contributed to the market that makes it valuable to non-coders, like me.
Pretty impressive chops.
Thanks!
I don’t think it has much value as the software for the official device is free and open source alternatives exist although limited.
I mostly built it for trust and doing exactly what I want.
!PIZZA
$PIZZA slices delivered:
(7/10) @danzocal tipped @themarkymark