cancel
Showing results for 
Search instead for 
Did you mean: 
2024 Khoros Kudos Awards

The Zoom Community has won the Best Customer Support Community award!

Celebrate with us

Native Room Controls - Response Filters

neve
Contributor II
Contributor II

In the documentation for Native Room Controls, Response Filters are mentioned, but there's not enough information to implement them and no examples.

 

"It is also simple to add your own for Response Filters. Within the rules section, you can also use the Trigger Events discussed below to drive your own automation with outside inputs."

 

How about some examples? How is user_customized_event1 generated? What is the format of the response_filter section?

1 ACCEPTED SOLUTION

neve
Contributor II
Contributor II

So I was able to find a code example on this page: Zoom Rooms display systems on/off – Zoom Support in the projector on/off examples. Part of it looks like this:

 
  "rules": {
    "operation_time_started": [
      "proj_left.power.on",
      "proj_right.power.on"
    ],
    "operation_time_ended": [
      "proj_left.power.off",
      "proj_right.power.off"
    ],
    "meeting_started": [
      "tv_left.power.on",
      "tv_right.power.on"
    ],
    "user_customized_event1": [
      "screen_left.motor.up"
    ],
    "user_customized_event2": [
      "screen_left.motor.down"
    ],
    "user_customized_event3": [
      "screen_right.motor.up"
    ],
    "user_customized_event4": [
      "screen_right.motor.down"
    ]
  },
  "response_filters": [
    {
      "name": "user_customized_filter1",
      "filter_regex": "(.|\r|\n)*d %1POWR=0(.|\r|\n)*",
      "trigger_event": "user_customized_event1"
    },
    {
      "name": "user_customized_filter2",
      "filter_regex": "(.|\r|\n)*d %1POWR=1(.|\r|\n)*",
      "trigger_event": "user_customized_event2"
    },
    {
      "name": "user_customized_filter3",
      "filter_regex": "(.|\r|\n)*d %1POWR=0(.|\r|\n)*",
      "trigger_event": "user_customized_event3"
    },
    {
      "name": "user_customized_filter4",
      "filter_regex": "(.|\r|\n)*d %1POWR=1(.|\r|\n)*",
      "trigger_event": "user_customized_event4"
    }
  ]
}

 

Also, in each adapter, after methods, there's a response_filter section which must associate a filter with an adapter. It would have been clearer with less generic names. 

Seems simple enough if you know regex (which I did a few decades ago). I think (.|\r|\n)*d %1POWR=0(.|\r|\n)* means (any character or carriage return or line feed) followed by "d%POWR=0" followed (any character or carriage return or line feed) will trigger the event.

I assume an example of how it works might be:
Zoom sends a power off command to the projector. The projector responds with a confirmation like "d%POWR=0". This matches the filter which triggers the event, which raises the projector screen.

I look forward to hearing about clever ways to use this.

View solution in original post

10 REPLIES 10

zoltan_gyorfi
Newcomer
Newcomer

I also need an example for feedback from TCP and RS232.
Also wondering about Button style change like toggling between active and inactive button states based on feedback. 

Mike-w
Zoom Partner
Zoom Partner

+1 

Also, looks like the Documentation could use a fresh up and be more detailed.

for example: in the doc is mentioned that one can use a button to trigger an event but no example of how to do it.

 

please add more optionality like creating macros to run multiple commands on button press, for example:

turning off multiple devices on room off button press.

 

 

PFT
Newcomer
Newcomer

Also looking for this information

neve
Contributor II
Contributor II

So I was able to find a code example on this page: Zoom Rooms display systems on/off – Zoom Support in the projector on/off examples. Part of it looks like this:

 
  "rules": {
    "operation_time_started": [
      "proj_left.power.on",
      "proj_right.power.on"
    ],
    "operation_time_ended": [
      "proj_left.power.off",
      "proj_right.power.off"
    ],
    "meeting_started": [
      "tv_left.power.on",
      "tv_right.power.on"
    ],
    "user_customized_event1": [
      "screen_left.motor.up"
    ],
    "user_customized_event2": [
      "screen_left.motor.down"
    ],
    "user_customized_event3": [
      "screen_right.motor.up"
    ],
    "user_customized_event4": [
      "screen_right.motor.down"
    ]
  },
  "response_filters": [
    {
      "name": "user_customized_filter1",
      "filter_regex": "(.|\r|\n)*d %1POWR=0(.|\r|\n)*",
      "trigger_event": "user_customized_event1"
    },
    {
      "name": "user_customized_filter2",
      "filter_regex": "(.|\r|\n)*d %1POWR=1(.|\r|\n)*",
      "trigger_event": "user_customized_event2"
    },
    {
      "name": "user_customized_filter3",
      "filter_regex": "(.|\r|\n)*d %1POWR=0(.|\r|\n)*",
      "trigger_event": "user_customized_event3"
    },
    {
      "name": "user_customized_filter4",
      "filter_regex": "(.|\r|\n)*d %1POWR=1(.|\r|\n)*",
      "trigger_event": "user_customized_event4"
    }
  ]
}

 

Also, in each adapter, after methods, there's a response_filter section which must associate a filter with an adapter. It would have been clearer with less generic names. 

Seems simple enough if you know regex (which I did a few decades ago). I think (.|\r|\n)*d %1POWR=0(.|\r|\n)* means (any character or carriage return or line feed) followed by "d%POWR=0" followed (any character or carriage return or line feed) will trigger the event.

I assume an example of how it works might be:
Zoom sends a power off command to the projector. The projector responds with a confirmation like "d%POWR=0". This matches the filter which triggers the event, which raises the projector screen.

I look forward to hearing about clever ways to use this.

shaneatzoom
Community Champion | Employee
Community Champion | Employee

Hi All,

 

Thanks for your interest and feedback on Native Room Controls.  It's been pretty busy over here in the Zoom factory, but this support article update is toward the top of my list.  

 

As @neve referenced, this is a good example of using room controls feedback events.  It is also how we would do a cascading "macro" style function today like @Mike-w referenced.  

 

We have customers using this for all kinds of things today like frosting pezioelectric (snap) glass for privacy on meeting start or using the on status of the main display to change the state of the overflow displays.

 

For those of you that do want to look a little behind the curtain, please contact your Zoom account team to ask for more info here and we'll be happy to share as much as we can 1:1.

 

We've been hard at work getting ready to share what's coming next here. We're not quite ready yet, but there's a lot incoming that we can't wait to share with this community ASAP.  

 

Thanks again for your support and please do keep an eye out for an update of the Room Controls support article soon!

 

(Did this answer your question? Please remember to 'Accept as Solution' if so)

 

 


Please be sure to mark 'accept as solution' if this answered your question and thanks for using Zoom!

Shane
Architect @ Zoom

@shaneatzoom thanks for the reply.

although I wasn't able to use the feedback replies, I have no way of debugging what reply i get and how zoom is getting it after applying the regex so I can't check my regex or command.

 

once again agreeing with @neve and his questions..

why so secretly? 

I myself work for an Integrator company so most of the time the clients have the access to the zoom platform and I don't have a testing and learning platform before integrating at the clients site, and i have no one that I can contact.

 

If someone could reach out to me with the needed info that would be great!

 

Thanks,

Michael

neve
Contributor II
Contributor II

Why so secret? Is there a public roadmap? I work for a department at a large university and have no idea who my account team is.

The example above is interesting but doesn't really solve a problem. Why wouldn't you lower the screen at the same time as powering on the projector? I'm not waiting until power on confirmation from the projector is a huge help.
The problem I would like to solve is when a user ends a meeting, then starts a new one up so quickly that the projector is still in cool-down mode and doesn't re-start. It's easy enough to power on the projector manually from room controls, but I still get the call.
I'm sure it would also be a huge help to have a resource of examples for talking to different manufacturers' equipment. I've got NEC figured out, but I've got an Eiki projector I need to control soon, and it would sure be nice not to have to start learning their protocol from scratch. Perhaps a GitHub repository of JSON examples.

@neve did you by chance ever find a solution?  I'm trying to do the same thing - I need a projector in cool-down to start right back up as soon as its ready if a new meeting has been started while the projector was in that state.

@bryanjbarton , Unfortunately I have not yet found a use for response filters. I've been able to update some projectors to newer models which cool down and warm up more quickly as well as some user training.

Yomi247
Newcomer
Newcomer

really