Questions About Working With Stream Deck and KM

Just because a profile pops up when a particular app is in focus, doesn't mean all the buttons in that profile have to relate to that app.

Of course. That's what the Switch Profile SD action is for.

It's hard to advise without knowing the specifics of your setup, but I'd say that the more time you spend with this, the clearer the best way to use it will be for you. Fool around with it.

1 Like

OK thanks again

I use and recommended the Flaticon library for SD images - the lineal color ones show particularly well.

2 Likes

thank you. Yes, the challenge is to find what displays nicely on a 1.5 cm button. I will look at the lineal ones

I've been reading this 2 year old thread with interest but I still have a question. I have a macro that I use to disable/enable my keyboard when my cat jumps on the desk and wants to walk over the keyboard. I've had to troubleshoot too many problems induced by my cat typing :frowning:.

I setup the top left SD key to always execute the cat keyboard KM macro and the icon changes to indicate if the keyboard is disabled or not. Pressing the key toggles the keyboard lock state and changes the icon. Here is my question: I have a number of profiles and always have the top left SD key designated for the cat macro. When I switch profiles, the key icon reflects the last state of the icon for that profile and not the actual state of the keyboard lock. Any advice on an elegant way of keeping the icon in sync with all profile pages? My only thought would be to setup a trigger whenever the app for the profile is active it checks the state of the KB lock and sets the icon a required.

Thanks,
--Chris

Could you set a global variable to reflect the state of the SD icon? In whatever macro or key you use to change profiles, add an action to test the state of that variable.

I have a similar scenario. I use Audio Hijack to apply corrective room EQ in my studio. If I manually switch on Audio Hijack via its SD toggle button in one profile, I want that to be reflected in all my other profiles.

Here's the toggle macro. As you can see, it executes a submacro* which sets the SD icons and sets the AudioHijackSDIcon variable to either ON or OFF:

Correction Toggle - Screenshot

The following macro uses that variable to set the icons upon every application switch, and is placed in a global group. Theres a short pause to give the SD profile time to load:

Maintain SD Icon State - Screenshot


*For completeness, here's the submacro too:

Set Hijack SD Icons (SUB!) - Screenshot

1 Like

Thanks @Steve_E and @noisneil, those are great suggestions.

I tried that this morning and was pulling my hair out until I figured out that I needed to put a delay for SD figure out that the app has switched. I put in 0.5 sec so I might try lowering that. Also, thanks for reminding me to put my icons in a file instead of in KBM. I went through a whole process a while back to convert all my embedded images in KBM to files for KBM performance reasons.

1 Like

I did the same and it's kind of a pain, isn't it. I think it would be great if KM had the option automatically save and reference image files to/from a separate folder, so that you get all the UX benefits of using images without the performance costs. It would also be great if you could set SD icons from paths directly, but Peter doesn't seem to think that's going to happen.

1 Like

For all my buttons that have images or titles dynamically updated, I have those actions performed via subroutines. Then, on the SD itself I use multi actions to switch profiles. The first action in the list switches to the new profile, and the subsequent ones are KM subroutines to set all the button icons I need on that profile.

If you’d like to know more let me know and I can show you examples tomorrow.

That would be great if you have time. I really don't understand how to take advantage of multi actions in SD. I got a mini and now that I've had it awhile I really wish I got a bigger one so I need to take best advantage of those 6 buttons!

Multi actions are pretty simple once you start tinkering with them. You just set one of the buttons to a multi action and then drop in all the actions you want it to run when you press said button.

Here’s a very simple example that queries the status of my office fan using macOS Shortcuts (since it’s plugged into a HomeKit compatible smart plug), and then sets the SD button icon either red or green depending on whether it’s on or off.

In this screenshot :arrow_down: I have a button to switch to my Default profile.

Stream Deck button to switch profiles screenshot (click to expand/collapse)

In this screenshot :arrow_down: I have a list of actions I want Stream Deck to execute when I press that button.
The first one is to actually switch profiles, then all the rest consist of running Keyboard Maestro macros to update button icons and titles. The blue highlighted one is the one that updates the office fan button.

Stream Deck multi action screenshot (click to expand/collapse)

In this screenshot :arrow_down: you can see that macro itself.
The two set clipboard actions set the red or green image to the clipboard depending on whether the fan is on or off, and then the SD button is set to that image.

Keyboard Maestro macro screenshot (click to expand/collapse)

That’s just one example. I do similar things to set buttons for Zoom camera, Zoom microphone, my peripheral battery percentages, internet speed test results etc. Let me know if anything is still unclear and I’ll be glad to explain further!

3 Likes

Thanks @cdthomer,that is really helpful. I do lots of HA stuff and you have inspired me to create a profile for that. I learn so much from ya'll!

1 Like

Glad to help! Don’t hesitate to reach out if you need some more help or ideas. :+1:t2:

These videos you shared of your examples are amazing!!

Would you be able to share with us some of the underlying macros?

I tried to recreate the MicDrop, office fan toggle and system volume with... limited success :sweat_smile:.

Super curious to see your implementation.

Hi Peter, yes I’ll post those (and perhaps some others) when I get some free time this weekend. :+1:t2:

@NoorTheGrey I had a few minutes at my iMac this afternoon so here is one of the system volume macros; it’s definitely the least complex.

You can copy it and adjust it for volume up and mute as well. Note that it will create a Named Clipboard called “Temporary” and the Button ID as I have it configured is “System Volume Mute”, since for my needs I want it to update the image of only the mute button on my Stream Deck and not my volume up/down buttons. You will need to point the file path in the set named clipboard actions to wherever you want to store your images for muted and unmuted.

I’ll post the others as I have time in the coming days.

-Chris

System Volume Down.kmmacros (7.0 KB)

Macro screenshot (click to expand/collapse)

Hello @cdthomer and @noisneil,

Thanks to your suggestions, I very much enjoyed working with the Stream Deck.

For the past few days, Stream Deck has gone into an unending loop of unexpected quit followed by spontaneous relaunch every few minutes which is driving me crazy and making the device basically unusable.

I am running Monterey latest version.
I was wondering if you would have a suggestion.

What I tried.

  • Quit and relaunch Stream Deck
  • Reboot my Mac (multiple times)
  • Delete all plugins (I was only using the KM and the AppleScript plugins)
  • I was using version 5.3.3→ I upgraded to ver 6 and the problem persisted.
  • I uninstalled ver 6 which is buggy according to what I read on the Internet, using the official Stream Deck uninstaller and reinstalled version 5
  • The problem persisted with a blank profile, before I restored my own profile and plugins

In Console, I found the following listed below (which I am unable to interpret)

Thanks very much


Console Log Text
13:38:30.2672          void MainWindow::bootstrap(): All object init done!
13:38:30.2675          void MainWindow::bootstrap(): Running in high dpi mode: 1
13:38:30.2689          ESDSharedFileServer::ESDSharedFileServer(): mapfile location /Users/jlette111/Library/Application Support/com.elgato.Stream Deck/STREAMDECKINTERNALSHM
13:38:30.6777          void ESDCustomPluginCommunication::onMessageReceived(): Plugin 75979830900690B1E93271428AD0CF5B is now connected
13:38:30.6779          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.6927          void MainWindow::onKeyboardStatusChange(): Firmware version in device(@(1)[4057/108/CL13L2A01912]): 1.01.000
13:38:30.6928          void MainWindow::onKeyboardStatusChange(): Device connected, serial number: CL13L2A01912 and id: @(1)[4057/108/CL13L2A01912]
13:38:30.6951          void MainWindow::ReloadProfiles(): Loading profiles from /Users/jlette111/Library/Application Support/com.elgato.Stream Deck/ProfilesV2
13:38:30.6952          ESDProfile *ESDProfileManager::LoadProfileAtPath(): Loading profile at path /Users/jlette111/Library/Application Support/com.elgato.Stream Deck/ProfilesV2/11C8A86E-FDC4-41DD-BD48-3736660CD70E.sdProfile
13:38:30.6974          void ESDProfile::AddSubProfile(): Sub profile with uuid AD5EE3EB-7995-4D6B-9F3C-79113D2A4669 added to profile 847BB676-DD24-4A6B-8181-D0EDF2181F77
13:38:30.6992          void ESDProfile::AddSubProfile(): Sub profile with uuid CA3C4823-C635-49FA-BD21-111F944D29DE added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6992          void ESDProfile::AddSubProfile(): Sub profile with uuid AAB5F607-BAD0-400D-AE8A-29D8E95CA679 added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6992          void ESDProfile::AddSubProfile(): Sub profile with uuid F8A81775-CD4A-4A11-BB9F-FA72D0CACE15 added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6993          void ESDProfile::AddSubProfile(): Sub profile with uuid 102408BA-7666-4EB0-B3E8-4EF2D5FC9579 added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6993          void ESDProfile::AddSubProfile(): Sub profile with uuid 847BB676-DD24-4A6B-8181-D0EDF2181F77 added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6993          void ESDProfile::AddSubProfile(): Sub profile with uuid F7F4627E-BFE1-4916-9B66-034E9A446CAD added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6994          void ESDProfile::AddSubProfile(): Sub profile with uuid 38233DC4-2648-4910-A920-BAD1666C9BF2 added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6994          void ESDProfile::AddSubProfile(): Sub profile with uuid 79FBD39C-F13F-4669-9EAA-A3B6A100109D added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6994          void ESDProfile::AddSubProfile(): Sub profile with uuid 5F40D4D7-A769-402C-B2FD-9601AD7BC80E added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.6994          void ESDProfile::AddSubProfile(): Sub profile with uuid EC558E7C-1A3F-42DE-95EC-3DE4F36C7A4C added to profile 11C8A86E-FDC4-41DD-BD48-3736660CD70E
13:38:30.7030          void ESDPreferenceTabGeneral::DeviceStateChangedNotification(): Dev FW ver: 1.1.0.0, Embed FW ver: 1.1.0.0
13:38:30.7030          void ESDPreferenceTabGeneral::DeviceStateChangedNotification(): show update fw button: no
13:38:30.7030          void ESDPreferenceTabGeneral::DeviceStateChangedNotification(): Serial No: CL13L2A01912
13:38:30.7031          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7033          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7034          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7035          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7035          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7036          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:30.7836          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:31.2079          void ESDCustomPluginCommunication::onMessageReceived(): Plugin EBE35C29A1048AD508F0D9F91D426A94 is now connected
13:38:31.2082          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:31.5894          void ESDCustomPluginCommunication::onMessageReceived(): Plugin 1D95AC4413C7A742DE264A9561222654 is now connected
13:38:31.5898          static ESDAction *ESDActionRegistry::CreateNewAction(): Trying to create an action from an unknown type com.corcules.Keyboard Maestro.run
13:38:35.4442          void EGQTSWUpdateDialog::checkForUpdate(): Check for update 2: https://gc-updates.elgato.com/Mac/sd-update/final/app-version-check.json
13:38:35.4445          void EGQTSWUpdateDownloader::startDownload(): Download task name: Update File, file URL: https://gc-updates.elgato.com/Mac/sd-update/final/app-version-check.json
13:38:35.5126          void ESDAppStoreManager::UpdateAppStorePlugins(): Check for Plugin Store updates
13:38:35.5143          void ESDAppStoreManager::UpdateAppStoreIconPacks(): Check for icon pack Store updates
13:38:36.0666          virtual EGQTSWUpdateDialog::UpdateState EGQTSWUpdateDialog::shouldUpdate(): current SW Ver: 5.3.3.15214, remote SW Ver: 5.3.3.15214
13:38:36.0673          bool EGQTSWUpdateDialog::handleUpdateFileDownloaded(): No update available

Sounds like a question for Elgato support to me.

1 Like

I second what @noisneil said; that’s definitely beyond my expertise, and perhaps (likely?) beyond the expertise of the other folks on this forum.

That being said, Elgato’s customer support is top-notch, and are good about replying very quickly.