[OBSOLETE] Remotec ZXT-310 Z-Wave-to-AV IR Extender

I won’t be converting this DTH into an Edge Driver so it will stop working once the Groovy platform is retired.

This is a device handler for the Remotec Z-Wave-to-AV IR Extender (Model: ZXT-310).

General Information

  • The device handler provides 6 sets of 9 buttons which allows you to learn up to 54 IR Codes from other remote controls.

  • Each set of buttons can be configured to use the internal IR Port or any of the External Ports. The device has 5 external ports and comes with 3 - 6’ external cables.

  • You can specify triggers for the 9 buttons. The options are Switch On, Switch Off, Switch On/Off, and Momentary Switch Push.

  • You can also push the buttons using any SmartApp that supports the Switch Level capability. Level 10% pushes button 1, 20% pushes button 2, etc.

  • The triggers and switch levels push the buttons for the active set of buttons, but to switch between the sets of buttons you need to tap the E1-E6 tiles or use a SmartApp like CoRE to execute the custom commands setActiveEP1 - setActiveEP6. Or use the optional SmartApp which will generate a separate virtual device for each set of buttons.

  • All you have to do to program a button is tap the “Learn” tile, tap the button you want to program, hold down the key on the remote control until the LED flashes twice, and then tap the “Learn” tile again.

Code Learning Process


Main Settings


Optional SmartApp and Virtual Devices

The optional SmartApp and device handler provide a lot of additional functionality:

  • The SmartApp creates 6 virtual devices and keeps them in sync with the main device.

  • Each virtual device has 9 buttons with settings for:

  • Triggers previously mentioned.
  • Button Label
  • Button Delay (When using triggers to push multiple buttons, you can use delays to ensure they’re pushed in the right sequence)
  • Button Repeat (For buttons like volume up/down, you can use the repeat setting to change the volume by more than one every time the button is pushed.)
  • All buttons have to be programmed from the main device. Set the EP# in the main device to the EP# shown in the top center tile of the virtual device. The port setting for each EP # also has to be changed from the main device.



This is awesome! Thanks Kevin.

I am happy using your device handler and smartapp, however, I got a question about the Synchronization of the IR device On/Off status.

For example, I have a TV assigned in the EP1, and it works well using your device handler on the smartthings app. But I got problem in this scenario.

I have an automation setting which turns off everything when there is no motion detection in 10 mins.

  1. turn on TV using device handler
  2. turn off TV using remote control (TV is still ON in the device handler)
  3. TV off is triggered automatically after 10 minutes, but it turns ON because on/off share the same IR code.

The ZXT-310 is not able to know the real ON/OFF status of TV. So, I am trying to use a smart plug with the TV. My idea is to use the metering feature of the smart plug which reads TV power consumption. That means if the smart plug reads the voltage is higher then 50W, then TV is now ON. If not, TV is OFF. I would like to create a smartapp which might be able to update the parameter of your device handler. And maybe after some efforts to modify your codes, I could fix the issue of this scenario.

Is it making sense? Any suggestion?

That’s easy to do without changing any code if you’re willing to install either CoRE or webCoRE. Those SmartApps have a little bit of a learning curve, but there are a lot of topics on the forum dedicated to helping users with them. Once you become familiar with them you’ll be able to implement any automation you can think of.

If you’re unfamiliar with either of those SmartApps you should probably go with webCoRE because it allows you to set them up using a web browser instead of having to do everything in the mobile app and it also allows you to import and export your automations.

With either of those SmartApps you would create a “piston” and the logic would be something like:

if motion sensor stays inactive for 10 minutes
	<you can add additional actions here to turn off the other devices>
	if smartplug power > 50
	when true
		using tv
			turn off

I am having problem getting IR xmitter to flash. I can LEARN from existing remote no prob. I added your smartapp and device handlers, under my IR thing, I select EP2, then select LEARN, then 1, I learned a code in from my remote, flashes twice, click LEARN again to save. In THINGS, my 310, I click on the EP2 “1” button, I see the LED on the 310 flash, connected flasher to IR2 output, but am not seeing any flash using my camera. Did I miss something?
2. ALSO, how would I program using the included IR library? I do not see any command in webcore for my 310?

The IR cables need to be somewhat close to the device your trying to control and the alignment needs to be almost perfect. Your much better off positioning the device so that the red led is pointed in the general direction of the device you want to control and not using the IR ports.

The IR Library doesn’t work with SmartThings so you have to use the learn feature for all the buttons.

I am technical but I cannot get a learned code to output to a port w flasher attached.
Could you please walk me thru step-by-step on how to setup the 310 so I can learn a code and then output it to a flasher attached to like port 2? I am sure I am just missing something. Your help would be greatly appreciated.

Mr Kevin, any help on this would be appreciated:)

What kind of device are you trying to control and are you able to control it by pointing the red LED at it instead of attaching the IR cable?

In a church, I have a ceiling projector and 2 hanging displays Im trying to control. In my sound booth, I do have an IR receiver connected so I can point the remote at the receiver and it controls the proj.
Lets c if I understand what needs to be done to perform a test:
On your custom device, if I select EP1 (which only outputs to the front xmitter), select button 1, click LEARN, use my remote so 310 led flashes twice, click LEARN again, hold my proj IR receiver in front of the 310, on your app click button 1, the proj should respond to that learned command. Does that sound right to u?

Please advise.

CORRECTION click LEARN, then select button…

Yes, with this correction, it sounds correct.

My TV, Blue-Ray Player, and Receiver are 2’-3’ apart and I’m able to control them all with the internal port that transmits from the front of the device.

The front IR transmitter is much more powerful than the ports on the back and while testing I was only able to get the cables to work when they were a few feet from the receiver.

If that button has a code stored and the device successfully sends it, the LED should blink once.

Hi . I’m trying to use the EP2 to EP6 , only can control my devices when are close to the zxt310 box . i use my cell phone camera to see id Ir led are working , i an see only what’s inside the box works. that should be only for EP1 if I use the IR extension cable. they do not work

Thank you very much in advance .

EP2 - EP6 can transmit through the cable or through the front of the device and there’s a setting for each EP that determines which one it uses.

If you have everything transmit through the front of the device the range should be at least 15’ and as long as all the devices are in the same general direction it should be able to control them all.

I found that the cables only transmit about 6’ and the alignment with the device has to be almost perfect which is why I don’t recommend using the cables.

thanks for the solution , now i fund the option

So were you able to get the attached IR cables to work or was the front transmitter able to reach all your devices?

Thank you SO much @krlaframboise for your exceptionally good device handler. I’ve been looking for a device like the ZXT-310 forever, and without your handler it would be of no good use to me.

I do have two questions I’d like to ask:

I have installed the SmartApp and have created the virtual devices for each EP port. I am using it successfully to turn on and off a Nixie Tube Clock. The remote control for the clock has one shared button for both On and Off. I have programmed EP1 Button1 Trigger to be On / Off and everything is working. However, I have noticed that SmartThings routines can sometimes cause On to get called even when the switch is already On. And routines can sometimes cause Off to be called even though the switch is already Off. I would expect the device handler to ignore On requests when the switch is already On, and I would expect it to ignore Off requests when it’s already Off. But that doesn’t seem to be the case. Even if the switch is already On, it will send the IR command again. Same with Off. Is there a way to keep this from happening? Since there is only one shared button for both On and Off, I really need the virtual switch to pay attention to its existing state. Otherwise things get out of sync. Is there a way to fix this? If you can tell me where in the DTH code to make this change, I’m more than happy to try and fix it myself and submit a pull request.

Next, I have a Yamaha stereo that I’d like to control but I lost the remote for it. It looks like the device may already be in the ZXT internal database (here), but I can’t figure out how to use the built-in database with your device handler. Is this possible?

Thank you again SO much for this amazing work. If you don’t already work for Remotec, I think they should pay you for your amazing integration! :grinning:

No device handlers that I’m aware of ignore on/off commands based on the current state because that state could be out of sync with the actual device and then you’d have no way of turning it on/off. For example if someone used the button or another remote to turn it on/off.

The ZXT-310 has no way of knowing the state of the actual device so it always sends the IR code.

I ended up connecting my entertainment sensor to a Zooz Power Strip so between that and this device I can make sure that nothing gets out of sync.

The code list download feature isn’t supported by ST.

The ZXT-310 has no way of knowing the state of the actual device so it always sends the IR code.

I understand. However, without tracking any state there is no meaningful “On” or “Off” for toggle buttons. It’s fine if the remote has separate On and Off buttons, but if it’s a toggle button then without tracking state “On” and “Off” have no real meaning. Pushing “On” might turn it On, but pushing “On” again will turn it off.

No device handlers that I’m aware of ignore on/off commands based on the current state

Logitech Harmony is a great example of this. Many TVs and stereos have only a single button for Power. If SmartThings sends “On” to Logitech Harmony for an activity that’s already running, Harmony does not send the IR command again. It specifically ignores the command because executing it would turn off the device.

That state could be out of sync with the actual device and then you’d have no way of turning it on/off. For example if someone used the button or another remote to turn it on/off.

If the device got out of sync because someone used a remote, that same remote could be used to get the device back into sync. Even without a remote, since it’s a toggle button one could simply cover up the IR port and flip the virtual switch. In my case, I never use the remote anymore. I strictly use voice commands so it will never get out of sync. (Unless maybe due to power loss, in which case I can do one of the above.)

Again, this is only a problem with devices that use a single code for both On and Off. Currently you have triggers for “On”, “Off”, “On / Off”, etc. How about adding a trigger for “On / Off With State”? Then it’s at least an option?

If you don’t feel this is an important feature, I respect your viewpoint. But I need this feature badly enough that I’d at least like to try and implement it myself. I would love your thoughts on how such a thing could be added and where in your code I would do it.

Thank you for all your help,


Just wrap the contents of the on command with:

if (device.currentValue("switch") != "on") {


and the off command with:

if (device.currentValue("switch") != "off") {