AirTouch4 Binding - OH3 and OH4

@mtrax I just saw your bug report on github. This actually looks to be an issue with my handling of the response message from the AirTouch5. Polyaire do made changes to their API from time to time, and my copy of the spec if a year or two old. I’ll reach out to them and get an updated spec.

Let’s continue this convo on your github issue.

thanks for your work @netwolfuk , I have installed the latest addon (5.0.3) and I can see it in the things list but when I start / activate I get “unknown” and openhab.log has the following:

java.lang.NullPointerException: Cannot invoke "airtouch.model.ControlRequest.getBytes()" because "controlRequests[i]" is null
        at airtouch.v5.handler.AbstractControlHandler.assembleRequest(AbstractControlHandler.java:26) ~[?:?]
        at airtouch.v5.handler.ZoneControlHandler.generateRequest(ZoneControlHandler.java:19) ~[?:?]
        at org.openhab.binding.airtouch.internal.handler.AirTouch5ServiceImpl.requestFullUpdate(AirTouch5ServiceImpl.java:70) ~[?:?]
        at org.openhab.binding.airtouch.internal.handler.AirTouch5Handler.lambda$0(AirTouch5Handler.java:275) ~[?:?]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:317) ~[?:?]
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
        at java.lang.Thread.run(Thread.java:1583) [?:?]

here is my thing file

Thing airtouch:airtouch5-controller:myhvac [host="192.168.0.15"]

Hmm, I see in the console app, I don’t do that initial control request.

I wonder why I am doing that in the OH code. I’ll need to dig into it a bit more, but won’t get to look at it until tomorrow sorry.

oh, it looks like I should just be calling the status handler, rather than the control handler. Oops

Please try latest release Releases · airtouch-java/openhab-addons · GitHub

good news !! I can see all the channels , now I’m trying to create items to link .

however I see the device has a “#” instead of a “:” in the channel definition (not sure what that means??) and I see an error (below)

eg

Switch  AT_Daikin_Power  "AC Daikin Power"   (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-power" }

openhab.log

2026-05-12 08:18:30.602 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading DSL model 'airtouch.items'
2026-05-12 08:20:14.710 [WARN ] [5.connector.Airtouch5ConnectorThread] - Could not handle finished message
java.lang.IllegalArgumentException: Unable to resolve ControlOrStatusMessageSubType from supplied byte. Supplied byte is: '45'
        at airtouch.v5.constant.MessageConstants$ControlOrStatusMessageSubType.getFromBytes(MessageConstants.java:160) ~[bundleFile:?]
        at airtouch.v5.handler.MessageHandler.determineSubMessageMetaData(MessageHandler.java:118) ~[bundleFile:?]
        at airtouch.v5.handler.MessageHandler.handle(MessageHandler.java:79) ~[bundleFile:?]
        at airtouch.v5.connector.Airtouch5ConnectorThread.handleFinishedMessage(Airtouch5ConnectorThread.java:126) ~[bundleFile:?]
        at airtouch.v5.connector.Airtouch5ConnectorThread.run(Airtouch5ConnectorThread.java:104) [bundleFile:?]

Looking at this page, I don’t think the # is the issue. Items can be : or # delimited.

It looks like my code is not handling that byte 45 correctly. Do you see the same behaviour in the console app?

no I couldn’t see any errors in the console app

and yes using the UID with “#” doesn’t seem to be an issue.

Could I please ask you to set the logging level to TRACE for org.openhab.binding.airtouch, and then create an issue with the details of the message? As per Logging | openHAB

It should be something like this in the karaf tool.

log:set TRACE org.openhab.binding.airtouch

log:set TRACE airtouch

log:tail

issue created Unable to resolve ControlOrStatusMessageSubType from supplied byte. Supplied byte is: '45' · Issue #1 · airtouch-java/openhab-addons · GitHub

thanks for your help so far.

I found one more bug internal temp is ready 1454 C for some reason.

also the old Daikin system had an external temperature sensor , is that available in this API?

the old Daikin system had an external temperature sensor , is that available in this API?

I had a look in the spec and can’t see any reference to an external temperature. Feel free to have a look through and see if I have missed something.

internal temp is reading 1454 C for some reason

Ah. Yes. They have changed the way the ACStatus and ZoneStatus represent temperature.
In v1.1 of the spec, it was the value of two bytes combined, then you subtract 500. After that you divide the result by 10.

However in v1.2 of the spec, it’s only the bottom 3 bits of the upper byte. Some of the other bits now represent defrost state. I have not added that support yet, but have fixed the code to just use the 11 bits of relevant info. I am now getting 19.2 C from the data you posted in the log.

New release as soon as I can.

all good now thanks,

I’m trying to build a widget to display zones and I have an copy of items if you want to use that in your doco.

all good now thanks

That’s great. Thanks for the confirmation

I have an copy of items if you want to use that in your doco

ooh. Yes please.

I did notice that in the data from the AirTouch, the names are fairly generic, and then are being mapped in the Items to other names.

I tend to do that the other way around. I have the zone names set in the AirTouch, and then I just use those in OH. Then they match on the AT wall UI to what is in the OH UI.

airtouch.things:

Thing airtouch:airtouch5-controller:myhvac [host=“192.168.0.15”]

airtouch.items

// Airtouch controller to Daikin AC unit
Group hvac
// power state ON/OFF
Switch  AT_Daikin_Power  "AC Daikin Power"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-power" } 
// mode of operation - one of Auto/Dry/Cool/Heat/Fan
String AT_Daikin_Mode   "AC Mode [%s]" <house>  (hvac) {channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-mode"}
// fan mode - one of LEVEL_1=Low/2=med/3=High
String AT_Daikin_Fan_Speed    "AC Fan [%s]" <fan>  (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-fanspeed" } 

Switch  AT_AC_Spill  "AC Unit is in Spill"  <switch> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-spill" } 
Switch  AT_AC_Timer_Act  "AC Unit Timer Active"  <switch> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-timer" } 

// temperature set point
Number:Temperature  AT_Daikin_SetTemperature  "AC Set Temperature [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-setpoint" }

// temperature of return air sensor
Number:Temperature  AT_Daikin_Duct_Temperature "AC Outside Duct temperature [%.1f °C]"  <temperature>  (hvac,temperature)  {channel="airtouch:airtouch5-controller:myhvac:ac-unit-0#airconditioner-unit-temperature" }

// Zones

// Zone#0 Lounge
Switch  AT_Zone_Power_Lounge  "AC Zone Power - Lounge"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-0#airconditioner-zone-power" } 
Number:Temperature  AT_Zone_Temperature_Lounge  "AC Zone Temperature - Lounge [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-0#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Lounge  "AC Zone Set Temperature - Lounge [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-0#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Lounge  "AC Zone Battery Low - Lounge"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-0#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Lounge  "AC Zone Airflow - Lounge "   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-0#airconditioner-zone-flow" }

// Zone#1 Kitchen
Switch  AT_Zone_Power_Kitchen  "AC Zone Power - Kitchen"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-1#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Kitchen  "AC Zone Temperature - Kitchen [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-1#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Kitchen "AC Zone Set Temperature - Kitchen [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-1#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Kitchen  "AC Zone Battery Low - Kitchen"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-1#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Kitchen  "AC Zone Airflow - Kitchen"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-1#airconditioner-zone-flow" }

// Zone#2 Study
Switch  AT_Zone_Power_Study  "AC Zone Power - Study"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-2#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Study  "AC Zone Temperature - Study [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-2#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Study "AC Zone Set Temperature - Study [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-2#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Study  "AC Zone Battery Low - Study"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-2#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Study  "AC Zone Airflow - Study"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-2#airconditioner-zone-flow" }

// Zone#3 Dining room
Switch  AT_Zone_Power_Dining  "AC Zone Power - Dining"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-3#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Dining  "AC Zone Temperature - Dining [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-3#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Dining "AC Zone Set Temperature - Dining [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-3#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Dining  "AC Zone Battery Low - Dining"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-3#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Dining  "AC Zone Airflow - Dining"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-3#airconditioner-zone-flow" }

// Zone#4 Front bed
Switch  AT_Zone_Power_Front_bed  "AC Zone Power - Front bed"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-4#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Front_bed  "AC Zone Temperature - Front bed [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-4#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Front_bed "AC Zone Set Temperature - Front bed [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-4#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Front_bed  "AC Zone Battery Low - Front bed"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-4#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Front_bed  "AC Zone Airflow - Front bed"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-4#airconditioner-zone-flow" }

// Zone#5 Bathroom
Switch  AT_Zone_Power_Bathroom  "AC Zone Power - Bathroom"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-5#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Bathroom  "AC Zone Temperature - Bathroom [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-5#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Bathroom "AC Zone Set Temperature - Bathroom [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-5#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Bathroom  "AC Zone Battery Low - Bathroom"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-5#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Bathroom  "AC Zone Airflow - Bathroom"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-5#airconditioner-zone-flow" }

// Zone#6 Master 
Switch  AT_Zone_Power_Master   "AC Zone Power - Master "  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-6#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Master   "AC Zone Temperature - Master  [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-6#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Master  "AC Zone Set Temperature - Master  [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-6#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Master   "AC Zone Battery Low - Master "  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-6#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Master   "AC Zone Airflow - Master "   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-6#airconditioner-zone-flow" }

// Zone#7 Back bed
Switch  AT_Zone_Power_Back_bed  "AC Zone Power - Back bed"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-7#airconditioner-zone-power" }
Number:Temperature  AT_Zone_Temperature_Back_bed  "AC Zone Temperature - Back bed [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-7#airconditioner-zone-temperature" }
Number:Temperature  AT_Zone_SetTemperature_Back_bed "AC Zone Set Temperature - Back bed [%.0f °C]"  <temperature> (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-7#airconditioner-zone-setpoint" }
Switch  AT_Zone_BatLow_Back_bed  "AC Zone Battery Low - Back bed"  <switch> (hvac)   { channel="airtouch:airtouch5-controller:myhvac:ac-zone-7#airconditioner-zone-battery-low" } 
Number  AT_Zone_Airflow_Back_bed  "AC Zone Airflow - Back bed"   (hvac)  { channel="airtouch:airtouch5-controller:myhvac:ac-zone-7#airconditioner-zone-flow" }

Will there be a OH 5.2 version release?