I don't completely understand your use-case, but regardless I think it's possible with RM. Tagging @Clye just in case you didn't get notified on my reply.
You can also create a custom app relatively simply, but it may get unwieldy depending on how many unique combinations and behaviors you need to implement.
Here's a snippet that I pared down from an app of mine. It shows how to subscribe to events on an input device (like a button) and then to execute commands or other actions on output devices (in this case, a multi-select switch input). You could implement whatever complicated logic you wanted within the event handler function in the app for button press events.
These references will be helpful to figure out what you can do based on apps, events, and devices:
https://docs.hubitat.com/index.php?title=Device_Object
https://docs.hubitat.com/index.php?title=App_Object
https://docs.hubitat.com/index.php?title=Event_Object
/*
*/
definition(
name: "input output example",
namespace: "tomw",
author: "tomw",
description: "",
iconUrl: "",
iconX2Url: "",
iconX3Url: "")
preferences
{
page(name: "mainPage1")
}
def mainPage1()
{
dynamicPage(name: "mainPage1", title: "", install: true, uninstall: true)
{
section
{
input name: "inputButton", type: "capability.pushableButton", title: "Input Button", multiple: false, required: true
}
section
{
input name: "outputSwitches", type: "capability.switch", title: "Output Switches", multiple: true, required: true
}
section
{
input name: "enableLogging", type: "bool", title: "Enable Debug Logging?", defaultValue: true, required: true
}
}
}
def logDebug(msg)
{
if(enableLogging)
{
log.debug "${msg}"
}
}
def installed()
{
logDebug("installed")
unsubscribe()
initialize()
}
def updated()
{
logDebug("updated")
installed()
}
def initialize()
{
logDebug("initialize")
subscribe(inputButton, "pushed", pushedHandler)
}
def uninstalled()
{
logDebug("uninstalled")
unsubscribe()
}
def pushedHandler(evt)
{
logDebug("evt.getDevice().name = ${evt.getDevice().name}")
logDebug("evt.name = ${evt.name}")
logDebug("evt.value = ${evt.value}")
def switchState, newState
for(thisSwitch in outputSwitches)
{
switch(thisSwitch.currentValue("switch"))
{
case "on":
thisSwitch.off()
break
case "off":
thisSwitch.on()
break
}
}
}