Telnet and SSH in Zoom Room Controls

Description
I am writing device profiles for several devices that support connection via TELNET and SSH. I am not having success in getting the Zoom Room controls “GenericNetworkAdapter” to connect to the devices. I have successfully written a file for a device that uses a raw socket (no telnet, or ssh), and it is working fine. Has anyone successfully connected a control to SSH or TELNET? The only reference on the forum I can find is from 10/20 (connecting to BIAMP). Any help would be appreciated

Error

No connection/controls working. If I point the room at my PC running a TCP server at port 23, (but not actual telnet), I get connection and commands are sent correctly.

Which App Type (OAuth / Chatbot / JWT / Webhook)?

Zoom Room Controls

Below JSON (Stripped down, but the essentials are there) is what I am using.

{
“about”: {
“app”: “MATRIX SWITCH”,
“version”: “v0.1.0”,
“created”: “2021-08-09”,
“notes”: “Connection via TELNET”
},
“adapters”: [
{
“model”: “GenericNetworkAdapter”,
“ip”: “tcp://10.35.89.76:23”,
“ports”: [
{
“id”: “mainSwitcher”,
“name”: “VIDEO SWITCHER”,
“methods”: [
{
“id”: “username”,
“name”: “USERNAME”,
“command”: “admin\x0D”,
“type”: “action”
},
{
“id”: “password”,
“name”: “PASSWORD”,
“command”: “password\x0D”,
“type”: “action”
},
{
“id”: “standbyConfirm”,
“name”: “confirm”,
“command”: “y\x0D”,
“type”: “action”
},
{
“id”: “standby”,
“name”: “Standby Mode”,
“command”: “standby %\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “on”,
“name”: “ON”,
“value”: “on”
},
{
“id”: “off”,
“name”: “OFF”,
“value”: “off”
}
]
},
{
“id”: “loadPreset”,
“name”: “Load Preset”,
“command”: “load preset:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “pre1”,
“name”: “Preset 1”,
“value”: “1”
},
{
“id”: “pre2”,
“name”: “Preset 2”,
“value”: “2”
},
{
“id”: “pre3”,
“name”: “Preset 3”,
“value”: “3”
},
{
“id”: “pre4”,
“name”: “Preset 4”,
“value”: “4”
},
{
“id”: “pre5”,
“name”: “Preset 5”,
“value”: “5”
},
{
“id”: “pre6”,
“name”: “Preset 6”,
“value”: “6”
},
{
“id”: “pre7”,
“name”: “Preset 7”,
“value”: “7”
},
{
“id”: “pre8”,
“name”: “Preset 8”,
“value”: “8”
}
]
},
{
“id”: “savePreset”,
“name”: “Save Preset”,
“command”: “save preset:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “pre1”,
“name”: “Preset 1”,
“value”: “1”
},
{
“id”: “pre2”,
“name”: “Preset 2”,
“value”: “2”
},
{
“id”: “pre3”,
“name”: “Preset 3”,
“value”: “3”
},
{
“id”: “pre4”,
“name”: “Preset 4”,
“value”: “4”
},
{
“id”: “pre5”,
“name”: “Preset 5”,
“value”: “5”
},
{
“id”: “pre6”,
“name”: “Preset 6”,
“value”: “6”
},
{
“id”: “pre7”,
“name”: “Preset 7”,
“value”: “7”
},
{
“id”: “pre8”,
“name”: “Preset 8”,
“value”: “8”
}
]
}
],
“response_filter”: [
“username_filter”,
“password_filter”,
“standby_filter”
]
}
]
},
{
“model”: “GenericNetworkAdapter”,
“ip”: “tcp://10.35.89.76:23”,
“ports”: [
{
“id”: “outputChannel1”,
“name”: “Output Channel 1”,
“methods”: [
{
“id”: “cecPower”,
“name”: “CEC Power”,
“command”: “set vidout cec power:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “on”,
“name”: “ON”,
“value”: “1,on”
},
{
“id”: “off”,
“name”: “OFF”,
“value”: “1,off”
}
]
},
{
“id”: “vidMute”,
“name”: “Video Out Mute”,
“command”: “set vidout mute:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “on”,
“name”: “ON”,
“value”: “1,on”
},
{
“id”: “off”,
“name”: “OFF”,
“value”: “1,off”
}
]
},
{
“id”: “vidFreeze”,
“name”: “Video Out Freeze”,
“command”: “set vidout freeze:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “on”,
“name”: “ON”,
“value”: “1,on”
},
{
“id”: “off”,
“name”: “OFF”,
“value”: “1,off”
}
]
},
{
“id”: “audOutMute”,
“name”: “Audio Out Mute”,
“command”: “set audout mute:%\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “on”,
“name”: “ON”,
“value”: “1,on”
},
{
“id”: “off”,
“name”: “OFF”,
“value”: “1,off”
}
]
},
{
“id”: “switchAV”,
“name”: “Source (A/V)”,
“command”: “set switch ci%o1\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “input1”,
“name”: “INP 1”,
“value”: “1”
},
{
“id”: “input2”,
“name”: “INP 2”,
“value”: “2”
},
{
“id”: “input3”,
“name”: “INP 3”,
“value”: “3”
},
{
“id”: “input4”,
“name”: “INP 4”,
“value”: “4”
},
{
“id”: “input5”,
“name”: “INP 5”,
“value”: “5”
},
{
“id”: “input6”,
“name”: “INP 6”,
“value”: “6”
},
{
“id”: “input7”,
“name”: “INP 7”,
“value”: “7”
},
{
“id”: “input8”,
“name”: “INP 8”,
“value”: “8”
}
]
},
{
“id”: “switchA”,
“name”: “Source Audio”,
“command”: “set switch ai%o1\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “input1”,
“name”: “INP 1”,
“value”: “1”
},
{
“id”: “input2”,
“name”: “INP 2”,
“value”: “2”
},
{
“id”: “input3”,
“name”: “INP 3”,
“value”: “3”
},
{
“id”: “input4”,
“name”: “INP 4”,
“value”: “4”
},
{
“id”: “input5”,
“name”: “INP 5”,
“value”: “5”
},
{
“id”: “input6”,
“name”: “INP 6”,
“value”: “6”
},
{
“id”: “input7”,
“name”: “INP 7”,
“value”: “7”
},
{
“id”: “input8”,
“name”: “INP 8”,
“value”: “8”
}
]
},
{
“id”: “switchV”,
“name”: “Source Video”,
“command”: “set switch vi%o1\x0d”,
“type”: “actions”,
“params”: [
{
“id”: “input1”,
“name”: “INP 1”,
“value”: “1”
},
{
“id”: “input2”,
“name”: “INP 2”,
“value”: “2”
},
{
“id”: “input3”,
“name”: “INP 3”,
“value”: “3”
},
{
“id”: “input4”,
“name”: “INP 4”,
“value”: “4”
},
{
“id”: “input5”,
“name”: “INP 5”,
“value”: “5”
},
{
“id”: “input6”,
“name”: “INP 6”,
“value”: “6”
},
{
“id”: “input7”,
“name”: “INP 7”,
“value”: “7”
},
{
“id”: “input8”,
“name”: “INP 8”,
“value”: “8”
}
]
}
]
}
]
}
],
“styles”: [
“mainSwitcher.icon=icon_rack_equipment”,
“mainSwitcher.savePreset.invisible=true”,
“mainSwitcher.username.invisible=true”,
“mainSwitcher.password.invisible=true”,
“mainSwitcher.confirm.invisible=true”,

"outputChannel1.icon=icon_hdmi",
"outputChannel1.switchAV.invisible=false",
"outputChannel1.switchA.invisible=true",
"outputChannel1.switchV.invisible=true"

],
“rules”: {
“meeting_started”: ,
“meeting_ended”: ,
“microphone_muted”: ,
“microphone_unmuted”: ,
“video_started”: ,
“video_stopped”: ,
“operation_time_started”: ,
“operation_time_ended”: ,
“device_username”: [“mainSwitcher.username”],
“device_password”: [“mainSwitcher.password”],
“standby_rules”: [“mainSwitcher.standbyConfirm”]
},
“response_filters”: [
{
“name”: “username_filter”,
“filter_regex”: “Enter username:”,
“trigger_event”: “device_username”
},
{
“name”: “password_filter”,
“filter_regex”: “Enter protected password:”,
“trigger_event”: “device_password”
},
{
“name”: “standby_filter”,
“filter_regex”: “Would you like to standby on the device?”,
“trigger_event”: “standby_rules”
}
]
}

Hey @awalton_svsi,

Thank you for reaching out to the Zoom Developer Forum. Please send an email to developersupport@zoom.us with a link to this thread.

I’ll use that email to gather information and get in contact with a SME.

Thanks,
Max

MaxM, thanks - email sent.

an update - I was able to use a different unit, and successfully tested a password/username free login process via TELNET. So that works, but now I am having problems getting it to login.

Hey @awalton_svsi,

Thank you for sending in a ticket. I’ve followed up with you there.

Thanks,
Max