Anyone using IntesisHome WiFi control of mini-split AC?

Hey Dave, out of curiosity, have you ever had a chance to run the add-on? org.openhab.binding.intesisbox-2.5.1-6.jar 1
Has been working fine for me over these months but would be good to know how it plays with the Mitsubishi box.


Cheers.

@rb44 havnt done so as of yet, and just went to but seems github is down.

Will try later today.

@rb44 Noticed this in my logs today. Havenā€™t had a chance to look at the code yet to see whats causing it.
I tried with my original tweaked version and your newest one

2020-07-16 08:17:08.691 [ERROR] [ntesisbox.internal.IntesisBoxHandler] - openConnection(): Socket Exception: No route to host (Host unreachable)

2020-07-16 08:17:08.691 [ERROR] [ntesisbox.internal.IntesisBoxHandler] - write(): Unable to write to socket: null 

java.lang.NullPointerException: null

	at org.openhab.binding.intesisbox.internal.IntesisBoxHandler.write(IntesisBoxHandler.java:378) ~[?:?]

	at org.openhab.binding.intesisbox.internal.IntesisBoxHandler.sendAlive(IntesisBoxHandler.java:291) ~[?:?]

	at org.openhab.binding.intesisbox.internal.IntesisBoxHandler.polling(IntesisBoxHandler.java:340) ~[?:?]

	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_241]

	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_241]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_241]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_241]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_241]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_241]

	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241]

2020-07-16 08:17:08.694 [INFO ] [ntesisbox.internal.IntesisBoxHandler] - keep alive sent

2020-07-16 08:17:08.694 [ERROR] [ntesisbox.internal.IntesisBoxHandler] - write(): Unable to write to socket: null 

java.lang.NullPointerException: null

@rb44 So just checked my router and one of my units hasnt got a dhcp lease. I did update fw the other day and havnt restarted it yetā€¦

Either a new firmware issue or i just need to restart.
Will let you know once Iā€™ve restarted and had a better look

Hi @delid4ve, yes that does sound like a network issue. Anyway just to confirm no changes to the network layer within the add-on. Thanks for the heads up.

Finally, I got my AC installed with IntesisHome/AirconWithMe WiFi adapters.
I will soon start development to get it fully implemented into openHAB.

@rb44 @delid4ve @ccutrer As you guys alreday implemented a IntesisBox Binding, I would suggest to merge the two appeoaches into a general Intesis Binding with seperate handlers for Home and Box devices. WDYT?

I already saw that yor Binding needs some refactoring, as it has channels implemented with static information, that should be changed into properties.

Best
Hans-Jƶrg

2 Likes

@hmerk One Intesis binding that just does the right thing, think that would simplify life for many Intesis device owners.

As promised, I started coding and making good progressā€¦

Update on IntesisHome integration:
First binding version for testing will be available by end of the week.
Just have to fix some minor issues on channel updates, clean up code and write documentation.

3 Likes

As promised, there is a first version available for testing.
Binding jar and README can be found here:

Pull Request for official integration is created as #8231

1 Like

A new version can be found in my repo, see link above. Improved error handling in case of session fails.

Up and running at the moment with my MH-AC-WIFI-1. Will let you know if I have any troubles over coming days. Thanks for your hard work!

1 Like

IntensisHome binding running great thus far. Would really like to interact with it through the HomeKit Addon but canā€™t quite get the metadata tags to line up. Does anyone else have experience implementing a openHAB HeaterCooler with HomeKit successfully?

Any guidance on whatā€™s not quite right with my code would be greatly appreciated! (ac power and acAmbientTemp link up fine but canā€™t seem to poll or register changes to the acMode / acSetPoint)


Group 				gAC    			"AC"       													{homekit="HeaterCooler"}
Switch              ac              "Power"                                 			(gAC)	{channel="intesis:intesisHome:70c70687:power", homekit="ActiveStatus"}
Number              acMode          "Mode"                                  			(gAC)	{channel="intesis:intesisHome:70c70687:mode", homekit="CurrentHeaterCoolerState, TargetHeaterCoolerState" [HEATING="1", COOLING="4", AUTO="0", HEAT="1", COOL="4"]}
Number              acFanSpeed      "Fan Speed"             			<fan>           (gAC)	{channel="intesis:intesisHome:70c70687:windspeed"}
Number              acVanesUpDown   "Vanes U/D Position"                    			(gAC)	{channel="intesis:intesisHome:70c70687:swingUpDown"}
Number:Temperature  acSetPoint      "Set Temperature [%.1f Ā°C]"			<heating>  		(gAC)	{channel="intesis:intesisHome:70c70687:temperature", homekit="CoolingThresholdTemperature, HeatingThresholdTemperature" [minValue=18, maxValue=30, step=1]}
Number:Temperature  acAmbientTemp   "Current Temperature [%.1f Ā°C]"		<temperature>   (gAC)	{channel="intesis:intesisHome:70c70687:returnTemp", homekit="CurrentTemperature"}
Number:Temperature  acOutdoorTemp   "Outside Temperature [%.1f Ā°C]"		<temperature>   (gAC)	{channel="intesis:intesisHome:70c70687:outdoorTemp"}

This might be more difficult. As you can see in my readme, most channels are of type Number, whereas Homekit expects Strings. You will need Proxy Items of type String and a rule converting the Number type Modes to the respective String. Your mappings are incorrect and wonā€™t work at all.

Please update to latest Dev Version from my repo. Found some possible NPEs and solved them.

Hi Hmerk,

iā€™m trying to install the intesisbinding from the github repo. but i get an access denied.
Actually i am a very big noob at this sort of things.

Iā€™m trying to install the source on a raspberry pi with openhab2 running on it.

What am i doing wrong?
wget -o org.openhab.binding.intesis-2.5.8-SNAPSHOT.jar https://github.com/hmerk/IntesisBinding.git
wget: org.openhab.binding.intesis-2.5.8-SNAPSHOT.jar: Toegang geweigerd

thanks for your help :slight_smile:

Did You try
wget -o https://github.com/hmerk/IntesisBinding/blob/master/org.openhab.binding.intesis-2.5.8-SNAPSHOT.jar

Managed to get my MH-AC-WIFI-1 working with the HomeKit add-on. Iā€™m sure thereā€™s cleaner ways to accomplish it but details below for anyone thatā€™s interestedā€¦

.items

Group 				gAC    				"AC"       										{ homekit="HeaterCooler" }
Switch              ac              	"Power"                                 (gAC)	{ channel="intesis:intesisHome:ac:power", homekit="ActiveStatus" }
String              acMode          	"Mode"                                  (gAC)	{ channel="intesis:intesisHome:ac:mode", homekit="TargetHeaterCoolerState, CurrentHeaterCoolerState" [HEATING="Heat", COOLING="Cool"] }
String              acFanSpeed      	"Fan Speed"             <fan>           (gAC)	{ channel="intesis:intesisHome:ac:fanSpeed" }
String              acVanesUpDown   	"Vanes U/D Position"              	 	(gAC)	{ channel="intesis:intesisHome:ac:vanesUpDown" }
String              acVanesLeftRight	"Vanes L/R Position"            		(gAC)	{ channel="intesis:intesisHome:ac:vanesLeftRight" }
Number:Temperature  acSetPoint      	"Setpoint Temperature"  <heating>       (gAC)	{ channel="intesis:intesisHome:ac:targetTemperature" }
Number:Temperature  acAmbientTemp   	"Current Temperature"   <temperature>   (gAC)	{ channel="intesis:intesisHome:ac:ambientTemperature", homekit="CurrentTemperature" }
Number:Temperature  acOutdoorTemp   	"Outdoor Temperature"   <temperature>   (gAC)	{ channel="intesis:intesisHome:ac:outdoorTemperature" }
Number 				acCoolThrs 	   		"Proxy Cool Setpoint [%.1f C]"  		(gAC)  	{ homekit="CoolingThresholdTemperature" [minValue=18, maxValue=30, step=1] }
Number 				acHeatThrs 			"Proxy Heat Setpoint [%.1f C]"  		(gAC)  	{ homekit="HeatingThresholdTemperature" [minValue=18, maxValue=30, step=1] }
Number 				acRotation 			"Proxy Rotation"  						(gAC)  	{ homekit="RotationSpeed" }
Number 				acSwing 			"Proxy Swing"  							(gAC)  	{ homekit="SwingMode" }

.rules

//Homekit CoolingThresholdTemperature and HeatingThresholdTemperature

rule "Convert acSetPoint to acHeatThrs and acCoolThrs"
when
    Item acSetPoint received update or
    System started
then
	val setp = acSetPoint.state.toString.replace(".0 Ā°C","")
    if(acHeatThrs.state != setp) acHeatThrs.postUpdate(setp)
    if(acCoolThrs.state != setp) acCoolThrs.postUpdate(setp)
end

rule "Convert acHeatThrs to acSetPoint"
when
    Item acHeatThrs changed
then
	val hthr = acHeatThrs.state.toString.replace(".0","")
	if(acMode.state != 4 && acSetPoint.state != hthr) { 
		acSetPoint.sendCommand(hthr)
	}
end

rule "Convert acCoolThrs to acSetPoint"
when
    Item acCoolThrs changed
then
	val cthr = acCoolThrs.state.toString.replace(".0","")
	if(acMode.state != 1 && acSetPoint.state != cthr) { 
		acSetPoint.sendCommand(cthr)
	}
end

//Homekit RotationSpeed

rule "Limit and convert acRotation to acFanSpeed"
when
    Item acRotation changed
then
	val rot = acRotation.state
	if(rot >= 0 && rot < 37) {
		acRotation.postUpdate(25)
		acFanSpeed.sendCommand(1)
	}
	if(rot > 36 && rot < 64) {
		acRotation.postUpdate(50)
		acFanSpeed.sendCommand(2)
	}
	if(rot > 63 && rot < 87) {
		acRotation.postUpdate(75)
		acFanSpeed.sendCommand(3)
	}
	if(rot > 86) {
		acRotation.postUpdate(100)
		acFanSpeed.sendCommand(4)
	}
end

rule "Convert acFanSpeed to acRotation"
when
    Item acFanSpeed received update or
    System started
then
	val fan = Float::parseFloat(acFanSpeed.state.toString)
	if(fan == 1 && acRotation.state != 25) acRotation.postUpdate(25)
	if(fan == 2 && acRotation.state != 50) acRotation.postUpdate(50)
	if(fan == 3 && acRotation.state != 75) acRotation.postUpdate(75)
	if(fan == 4 && acRotation.state != 100) acRotation.postUpdate(100)
end

//Homekit SwingMode 

rule "Convert acSwing to acVanesUpDown"
when
    Item acSwing changed
then
	if(acSwing.state == 0 && acVanesUpDown != 4) acVanesUpDown.sendCommand(4)
	else acVanesUpDown.sendCommand("SWING")
end

rule "Convert acVanesUpDown to acSwing"
when
    Item acVanesUpDown received update or
    System started
then
    val vud = acVanesUpDown.state
	if(vud == "SWING") acSwing.postUpdate(1)
    else acSwing.postUpdate(0)
end

Have noticed a possible bug or perhaps just a difference between our units. Selecting fan speed ā€˜Autoā€™ from the binding doesnā€™t work - after about 5-10 seconds it switches to ā€˜Lowā€™ and stays there. Interestingly I can set the fan speed to ā€˜Autoā€™ using the physical IR remote so it does exist. Any ideas or have you tested it on your unit?

Yes, have seen this as well. There is a difference between the API documentations and the allowed values reported from the device. Auto (0) is not an allowed value.
I am trying to find a workaroundā€¦

1 Like