[RELEASE] Remotec ZXT-120 AC IR Controller (2015)

Dear @Ron,

I have included your device type “properly” this time. Wasn’t aware it was included in another hub.

This is the live log that I got:

f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:29 AM: debug Parse returned [[value:25, unit:C, name:temperature, isStateChange:false, displayed:false, linkText:ZXT-120, descriptionText:ZXT-120 temperature is 25°C]]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:29 AM: debug Parse map=[value:25, unit:C, name:temperature, isStateChange:false, displayed:false, linkText:ZXT-120, descriptionText:ZXT-120 temperature is 25°C]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:29 AM: debug Sensor Reporting temperatureName ZXT-120 25°
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:29 AM: debug SensorMultilevelReport reporting…cmd=SensorMultilevelReport(precision: 0, scale: 0, scaledSensorValue: 25, sensorType: 1, sensorValue: [25], size: 1)
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:29 AM: info Parsing Description=zw device: 0A, command: 3105, payload: 01 01 19
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:27 AM: debug Parse returned [[name:battery, value:82, unit:%, displayed:false, isStateChange:true, linkText:ZXT-120, descriptionText:ZXT-120 battery is 82%]]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:27 AM: debug Parse map=[name:battery, value:82, unit:%, displayed:false, isStateChange:true, linkText:ZXT-120, descriptionText:ZXT-120 battery is 82%]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:27 AM: debug Battery Level Reported=82
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:27 AM: info Parsing Description=zw device: 0A, command: 8003, payload: 52
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:25 AM: warn parse called generating null map…why is this possible ? description=zw device: 0A, command: 4405, payload: 3F
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:25 AM: debug Supported Fan Modes: fanAuto fanLow fanMedium fanHigh
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:25 AM: info Parsing Description=zw device: 0A, command: 4405, payload: 3F
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:22 AM: warn parse called generating null map…why is this possible ? description=zw device: 0A, command: 4005, payload: 67 05
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:22 AM: debug Supported Modes: off heat cool dry
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:22 AM: info Parsing Description=zw device: 0A, command: 4005, payload: 67 05
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:20 AM: debug Parse returned [[name:tempOffset, displayed:false, value:0, isStateChange:false, linkText:ZXT-120, descriptionText:ZXT-120 temp offset is 0]]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:20 AM: debug Parse map=[name:tempOffset, displayed:false, value:0, isStateChange:false, linkText:ZXT-120, descriptionText:ZXT-120 temp offset is 0]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:20 AM: debug reported offset=0
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:20 AM: info Parsing Description=zw device: 0A, command: 7006, payload: 25 01 00
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:19 AM: debug Parse returned [[name:remoteCode, displayed:false, value:367, isStateChange:true, linkText:ZXT-120, descriptionText:ZXT-120 remote code is 367]]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:19 AM: debug Parse map=[name:remoteCode, displayed:false, value:367, isStateChange:true, linkText:ZXT-120, descriptionText:ZXT-120 remote code is 367]
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:19 AM: debug reported currentConfigCode=367
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:19 AM: info Parsing Description=zw device: 0A, command: 7006, payload: 1B 02 01 6F
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:17 AM: debug TempOffset: 0
f0b2bcf1-a60b-47ec-b5aa-039c9a8face2 10:40:17 AM: debug New Remote Code: [1, 111]

Whenever I press Cool, I am still having the null pointer error. Trying to find out where this error came from.

I believe my problem lies with the remote code and configuring to “always listening” mode.

The device doesn’t flash 4 times when I attempt the steps to change the mode.

Not really sure if I am using the remote code. My air-con is Daikin, Split Unit i suppose.

From the logs it looks like you configured code 367 which is for Daikin, Daikin has 30 possible codes so that will be challenging to trial and error.

If your device isn’t in “Always Listening” it ISN’T going to work !

I have asked so many times now…Did you exclude the device before following the instructions in the manual link I provided. (Many device come with instructions with errors)

  1. Remove device from smart apps
  2. Exclude device
  3. Switch device to “Always Listenting”
  4. Re-include
  5. Configure preference with code
  6. Press button on zxt-120 and send config

If you can’t get the device into Always Listening mode the I would suggest you return it.

When you press cool you get this error ?
java.lang.NullPointerException: Cannot invoke method multiply() on null object @ line 805

I really can not explain that. Line 805 doesn’t have a call to multiply so I am lost for what is going on.

Yes I have exclude the device before following the instructions, it does not flash 4 times that manual indicates.

As for the cool button, I will try to figure out where is the multiply method.

@marcusqzy it really is critical you get “Always Listening” mode working before you move any further. I had issues getting this to work also. Try excluding and then resetting the device.

Reset - Page 19
https://github.com/gouldner/SmartThingsPublic/blob/master/devicetypes/gouldner/docs/zxt-120/rm-zxt-Zipato-Ir-Extender-User-Manual-v1.0.pdf

Then set Flirs “Always Listening” - Page 14
https://github.com/gouldner/SmartThingsPublic/blob/master/devicetypes/gouldner/docs/zxt-120/rm-zxt-Zipato-Ir-Extender-User-Manual-v1.0.pdfd

Regarding the Multiply issue Line 804 and 805 are as follows.
log.debug "Converting celsius to fahrenheit"
convertedDegrees = Math.ceil(celsiusToFahrenheit(degrees))

Do you see “Converting celsius to fahrenheit” one line before the null exception ?

It looks like you don’t have degrees set before you are pressing “Cool” are you using the device sliders to set your desired temperature before you issue the call to “Cool” ?

Dear @Ron,

Sorry for the trouble I finally got it working. Yes the null pointer was pointing at the slider because it was empty. Thank you so much for your patience!

One last question! As for the slider, it shows “setHeatingSetpoint({28} C)” regardless where the slider is at. May I know why?

@marcusqzy are you using celsius as your ST app default. If so then look at this section of the device code. You need to comment out two lines and uncomment two lines as the instruction in the device code state. Sorry this is a dumb limitation of the ST system, I can’t dynamically select the correct sliders so you have to manually alter the code.

VERY GLAD you have this working now. This is a tricky device to configure, you can imagine how much fun it was to write the device code for it :slight_smile:

Also if you have an Amazon Echo, Google Home or other HA device and want to be able to turn on Cool, Heat or Dry modes. Check out this Smart App. It creates Virtual buttons in ST mapped to the “Cool”, “Heat” and “Dry” modes in the ZXT-120. The buttons are “Stateless” meaning if you say On when the device thinks the cool button is already on it still sends the command. This is important because the ZXT-120 doesn’t have a method of knowing the current state of your AC unit. This allow you to voice command your AC with commands like “Alexa, turn on Bedroom Cool”, “Alexa, turn on Bedroom Heat”, “OK Google, turn on Bedroom Cool” etc.

If you want to use this you need to install my stateless virtual button device code first as a DEVICE and then install the mapper as a smart app.

I assume “Bedroom” is the air-con and “Cool” is the mode. I’ve installed the device and have it ON, and also the smartapp is used by my ZXT-120 which I named it “Home Theatre A/C”. Alexa don’t quite recognize what I spoken haha! Can you guide me through?

No, when you install the smart app I provided you give it a name “Bedroom” and it creates up to three virtual switches “Bedroom Cool”, “Bedroom Heat” “Bedroom Dry”.

You can then rename the virtual switches if you like. For example eventually if you have enough of these Alexa starts confusing them because they are all named Heat etc. So you get a lot of inquires from Alexa which switch did you mean? So I have renamed my “Master Bedroom Heat” to “Warm” for example so I can just say “Alexa, turn on Warm” when I am in my Master Bedroom.

You can also use Alexa Helper to assign switch commands to cooling etc but I have never tried it since I had already written my own custom smart apps.

Understood! I am able to turn it on once with Alexa despite many attempts. Probably Alexa have a hard time understanding my questions haha! Thank you so much @Ron!

Ron, thank you for your work on this. I recently build the device handler for the zct-120 using your code. I made sure the listening was set to constant and was able to add the device to my hub.
I am able to access the preferences in the Ide and change the Ir code settings. And when I make changes in the mobile app, I can go into the device in a ide, list events and see the posting of whatever change I’d just made.

My problem is that I never see the led indicator flash on the unit when I issue a command (led works if I press top bottom), the problem I suspect is that when i created the device handler, i didn’t know what value to put in the “Network Device ID” (or is it Device Network ID) field in the form, and couldn’t leave it blank so I made up a value.
I’m guessing the reason no led is that smart things can’t find the device.

Sorry if this is stupid but I’ve added a couple of other device handlers that work fine, just don’t recall I had this issue. Doubly sorry if this is laid out in this thread and I’ve missed it.

Thanks in advance for your help

Bob

@Bromo999, don’t add the device in the ide. Add it in the app. Network ID is not required. You simple add the device in the app which will perform the inclusion and assign a network id.

So steps are

  1. Switch non-included device to constant (which you did)
  2. install device code in “Device Handlers” section using the “Using Code” and just past the code as is into the screen and save then publish. (Note if you plan to use Celsius make sure you change the commenting of the code for the correct tile display)
  3. Using the App, add new “Thing”
  4. Check the ide “Devices” to make sure the zxt-120 is using the correct device handler you installed, if not then switch it in the IDE using the edit button and change to the correct device handler.
  5. Configure your preferences and test.

Thank you! That did it.

I also want to thank you, Ron. Really new to this, so this entire thread helped.

I am almost there; I just need to find the code for my Lennox mini-split system. I’ve tried the codes from Remotec, but they’re not working. I’ll keep experimenting.

All the best,

Arggg. Having SO much fun (NOT) looking for the right code for my Lennox mini-split…

Ron, have you tried any other solutions than the ZXT-120 for your mini split? I have 3 mini splits that I need to heat in the winter and cool in the summer. Basically I just want to turn on/off the units, and I’m not so much worried about adjusting temperatures.

Any help you can give would be appreciated.
Thanks.

No I have this working on my split (which is the reason I worked on the device code and maintain it) I toyed with the idea of using a harmony remote but they behave differently expecting modes and are crazy expensive compared to the zxt-120. I have 5 splits so zxt-120 were expensive enough.

It’s a hack but you could just learn ON and OFF into a specific temp for heat and again for cool.

I did this for a Dyson Heater I wanted to control and it worked. It was a little finicky and you have to make sure the device is configured for the correct temp (or learn ON into every heat temp and again for every cool temp.)

I would say keep trying to find the correct code. You are using the chart right. Not sure how many exist for Lennox.

Also are you sure the code are getting configured. Do the new codes display on the “Thing” page when you configure? Do you have the flirs mode in “Continuous” ?

You should ask the community for other solutions on a new thread. Perhaps someone else has solved the issue not using the ZXT-120.

Here is an updated version that self updates temperature readings automatically - no more polls.

It also supports multi-tile, and adhere’s to thermostat capabilities for smartthings.

After upgrade installing, go to the device, hit the gear (settings), and hit done

On new installs, go to the gear (settings) , and fill in your IR code, and hit done.

It should be compatible with Ron’s original.

Happy New Year all,

I just set up a new ZXT-120 using Ron’s code to control a Fujitsu Halcyon Mini Split. I am using code 199 which turns on the unit perfectly, changes fan speeds and vent positions. I am however unable to change temperature setpoints. How can I accomplish this? The set point slider do not send out any IR commands. They only change the cooling/heating setpoints variables. What is the difference between this variables and the thermostat setpoint variable? Why are the reported cooling/heting setpoint variables stuck at 75 deg?

Thx all for your help.

Try the dth from the gist. It should correct your issue

I have a halcyon I use it with. Mine uses code 16

After setting temp with slider you press heat or cool to send.

I just bought a bunch of these devices. I am afraid I have no idea how to use the code to get them up and running. Is there anywhere I can get help with that?