MMM-KeyBindings: Control your mirror with Amazon Fire Stick Remote and Generic Keyboard Inputs


  • Module Developer

    @aries1984 said in MMM-KeyBindings: Control your mirror with Amazon Fire Stick Remote and Generic Keyboard Inputs:

    you talk about “KeyCode” being a part of the payload

    Thanks for catching this. There must have been some remnants from the first version when that’s what I used. It’s been fixed now.



  • thanks @shbatm for all your work on this module.

    I am having some problems getting it working with my MM. I have the module installed and loading, my Amazon Fire TV Remote is recognized and recognizing key presses. I am however, having issues with getting modules to respond to any keypresses.

    I started with the basic config as suggested in your doc, hoping that I could succeed in getting the monitor to turn on and off with the home key. I could not get this to work.

    {
        module: 'MMM-KeyBindings',
        config: {
            enableMousetrap: true
        }
    

    I installed the “MM-ViewNotifications” module to see what was happening and it seems that the MMM-KeyBindings module is sending a “MONITORTOGGLE” command with the homekey press and my Monitor does not turn off. From reading your previous message I don’t think that this will work anymore, as it sounds like you have removed that functionality from this module and rely on other modules like MMM-Remote-Control for this.

    So I added this (below) to my config file, but even though I have specifically changed the Home button action to ‘MONITOROFF’, MMM-ViewNotifications still reports that it is sending a ‘MONITORTOGGLE’ command. My next attempt was to try and control somthing else (hiding the clock) with the ‘Enter’ button. I think that the problem I am having with that may be syntax, I’m not really sure how I should configure MMM-KeyBindings include the corrrect payload.

    I am able to successfully use the following URL to turn off my monitor with MMM-Remote-Control “http://192.168.1.104:8080/remote?action=MONITOROFF” as well “http://192.168.1.104:8080/remote?action=HIDE&module=module_5_clock” is able to hide my clock.

    If you could look and my configuration and offer some guidance I would appreciate it.

    { 
        module: 'MMM-KeyBindings',
        config: {
            enableMousetrap: true,
    		keyMap: {  
        Home: "KEY_HOMEPAGE", 
        Enter: "KEY_KPENTER", 
        ArrowLeft: "KEY_LEFT", 
        ArrowRight: "KEY_RIGHT", 
        ArrowUp: "KEY_UP", 
        ArrowDown: "KEY_DOWN",
        Menu: "KEY_MENU", 
        MediaPlayPause: "KEY_PLAYPAUSE", 
        MediaNextTrack: "KEY_FASTFORWARD", 
        MediaPreviousTrack: "KEY_REWIND",
        Return: "KEY_BACK"
    },
    	},
    	actions: [{
    		key: "Enter",
    		state: "KEY_LONGPRESSED",
    		instance: "SERVER",
    	//	mode: "DEFAULT",
    		notification: "REMOTE_ACTION",
    		payload: { action: "HIDE&module=module_5_clock" }
    		},
    		{
    		key: "Home",
    		state: "KEY_PRESSED",
    		instance: "SERVER",
    	//	mode: "DEFAULT",
    		notification: "REMOTE_ACTION",
    		payload: { action: "MONITOROFF" }
    		}
    		]
    
    },
    


  • Hello,
    This module looks like exactly what I need, but unfortunately I’m having a hard time getting it to work with a standard USB keyboard directly connected. Reading through I believe I’ve got MMM-KeyBindings and MMM-Carousel set up appropriately, but no matter what I try it doesn’t appear to have any effect.

    I can use the mouse to click on the Carousel navigation to change pages. I’ve also ensured I’ve clicked within the window to make sure the browser has focus, but the keyboard events don’t do anything. Clicking CTRL-SHIFT-I, I can see in the debugger that MouseTrap is actually seeing the keyboard events, but I must have something wrong in the config preventing them from being handled appropriately.

    At first I was trying to get the right and left arrow keys on the keyboard to work, but it looks like the names of those are a bit more complicated (having similar-but-different names to the ArrowRight and ArrowLeft buttons on the remote), so I just switched to “r” and “l”. I’ve also tried the “keyBindings” both inside the MMM-Carousel “config” section and up at the module top level as shown below.

    I’m running the latest versions of both KeyBindings and Carousel as of today. Here’s the relevant sections of my config.js, any help is greatly appreciated:

    	{
                module: 'MMM-KeyBindings',
    			config: {
                    enabledKeyStates: ["KEY_PRESSED"],
                    evdev: { enabled: false },
                    handleKeys: [ 'r', 'l' ],
                    enableMousetrap: true,
    			}
    		},
    
            {
                module: 'MMM-Carousel',
                position: 'top_bar', // Required only for navigation controls
                config: {
                    transitionInterval: 0, //20000,
                    showPageIndicators: false,
                    showPageControls: true,
                    ignoreModules: ['MMM-ViewNotifications','alert','updatenotification','MMM-KeyBindings'],
                    mode: 'slides',
                    slides: {
                        main: [{name:'clock', classes:'zoom200'},'MMM-CalendarExt2', {name:'MMM-DarkSkyForecast', classes:'zoom200'}],
    					"Slide 2": ['MMM-BackgroundSlideshow',],
                        "Slide 3": [{name:'MMM-aviationwx', classes:'zoom200'},{name:'MMM-DarkSkyForecast', classes:'zoom200'},],
    				},
                },
                keyBindings: { 
                    //NextSlide: "ArrowRight", // Remote Key Name
                    NextSlide: "r",          // Keyboard Key Name
                    //PrevSlide: "ArrowLeft",  // Remote Key Name
                    PrevSlide: "l"           // Keyboard Key Name
                },
            },
    


  • @shbatm and @jdfraser , I believe I figured it out after much debugging and banging my head on the desk.

    There’s a config property that’s not documented that needs to be configured to accept keyboard presses. You’ll need to add

    enableKeyboard: true,
    

    in your MMM-KeyBindings module config. Here’s my working config, there may or may not be some unneeded commands in there, but it was needed to get the “r” and “l” keys to move the MMM-Carousel page next and previous. Note you also need to add the “handleKeys” for any of the non-standard keys.

        {
                module: 'MMM-KeyBindings',
    	    config: {
                    enabledKeyStates: ["KEY_PRESSED"],
                    evdev: { enabled: false },
                    handleKeys: [ 'r', 'l' ],
                    enableMousetrap: true,
                    enableKeyboard: true,
    			}
    		},
    
            {
                module: 'MMM-Carousel',
                position: 'top_bar', // Required only for navigation controls
                config: {
                    transitionInterval: 0, //20000,
                    showPageIndicators: false,
                    showPageControls: true,
                    ignoreModules: ['MMM-ViewNotifications','alert','updatenotification','MMM-KeyBindings'],
                    mode: 'slides',
                    slides: {
                        main: [{name:'clock', classes:'zoom200'},'MMM-CalendarExt2', {name:'MMM-DarkSkyForecast', classes:'zoom200'}],
    					"Slide 2": ['MMM-BackgroundSlideshow',],
                        "Slide 3": [{name:'MMM-aviationwx', classes:'zoom200'},{name:'MMM-DarkSkyForecast', classes:'zoom200'},],
                    },
                    keyBindings: { 
                        enabled: true,
                        map: {
                            NextSlide: "r", 
                            PrevSlide: "l", 
                        },
                        mode: "DEFAULT"
                    }
                },
            },
    

  • Module Developer

    @gregp Glad you got it working. I’m not sure what happened with the README and where the details went around “enableKeyboard” and “enableKeyBindings”, looks like it got lost during an update. I will get it corrected on Github.

    Also, enableMousetrap was replaced by enableKeyboard as a breaking change during one of the recent updates. You no longer need enableMousetrap in your config, just enableKeyboard.

    Just a note, if you want to use ArrowLeft and ArrowRight you can (depending on your keyboard). This will not interfere with the “KeyBindings” (Bluetooth Remote) unless you want the ArrowLeft on the remote to do something different than the keyboard.

    Finally, it looks like you found it between your first and second post, but just for anyone else, the keyBindings section needs to be inside the config section for MMM-Carousel.

    Just to close the loop with @jdfraser, this was discussed further and closed in Issue #6 and Issue #7 on GitHub.



  • @shbatm Fantastic! Thanks again!