Page 1 of 2

Intesisbox/Intesishome with Domoticz

Posted: Saturday 01 June 2019 22:24
by drake
Hello,

Has anyone dedicated time to integrate IntesisBox/IntesisHome with Domoticz?
I have seen that there are some drivers for some home automation platforms (https://www.intesisbox.com/en/fujitsu-a ... 1/gateway/)

I have installed recently a Fujitsu duct air conditioner and I'm in doubt about to buy IntesisHome (FJ-RC-WIFI-1) or IntesisBox (FJ-RX-WMP-1) to control and monitor this equipment.

Is there another module that I can integrate with the AC to control with Domoticz?

Regards

Re: Intesisbox/Intesishome with Domoticz

Posted: Sunday 07 July 2019 9:08
by credenty
Hello,

We have asked several questions about IntesisHome, it would be good if it was compatible since it covers a wide variety of air conditioner brands and also has an APi.

We could do a survey to find out how many people are interested


Regards,

Re: Intesisbox/Intesishome with Domoticz

Posted: Monday 19 August 2019 10:39
by CV8R
Hi All,

I am in no way a programmer but took the risk and bought a IntesisBox PA-RC2-WMP-1 which is matched to my Panasonic whole home inverter in the hope of getting a plugin working and learning something along the way.

The PA-AC-RC2-WMP-1 uses the WMP protocol and I am sure the WMP protocol is standard across the IntesisBox range. Good news is that I have the plugin working and it feels very tightly integrated to Domoticz. I have been tweaking over a number of months but generally works well for me. :D

Connected is way, way, sooooo much better than the timer that comes standard with the unit.

It supports:
Power: On|Off
Mode: Auto|Heat|Dry|Cool|Fan
Fan: Auto|1|2|3
Set temp
Ambient temp
Error LED and Error Message (later is untested because the Pana AC has never gone into error state)

It reads out the vanes limits to the log but does nothing with them.

So some of it is hard coded but you could easily adapt to your unit.

I am happy to share the code if you are willing to go the WMP route. My unit does not have vanes for left/right and or up/down, since it is mounted in the roof space and has ceiling ducts in each room. This will mean no control for the vanes on units with a wall mounted indoor unit. It would be simple to add control.

Cheers
CV8R

Re: Intesisbox/Intesishome with Domoticz

Posted: Thursday 22 August 2019 16:24
by xavierlp
Hello

I could integrate IntesisHome to my domoticz.

What you need is
1- Python 3.5
2- IntesiHome library / You can find the IntesisHome library here: https://github.com/jnimmo/pyIntesisHome
3- Python script with json api of domoticz


So first, In the directory home/pi/domoticz/scripts/python copy the file pyintesishome.py and change properties to be executable.
Second create a script in the same directory like this

Code: Select all

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-

import requests
from optparse import OptionParser
from pyintesishome import IntesisHome	
import sys
import pycurl
import re
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import time
from datetime import datetime
try:
    from io import BytesIO
except ImportError:
    from StringIO import StringIO as BytesIO

def main():

    username="xxxxxxxx" # IntesisHome login
    password="yyyyyyyy" # IntesisHome password
    idd = 111111111111 # IntesisHome device id
    CannesCorail = None

    temp_idx = 638  # Domoticz IDX
    set_point_idx = 637 # Domoticz IDX

    CannesCorail = IntesisHome(username, password)
    CannesCorail.poll_status()

    print(CannesCorail.get_setpoint(idd))
    print(CannesCorail.get_temperature(idd))
	
    clim_temp_set = CannesCorail.get_setpoint(idd)
    clim_temp_actuelle = CannesCorail.get_temperature(idd)
  
    #passage de la temperature récupérée a Domoticz
    url='https://myserver:myport/json.htm?username=YYYYYYYYYYY==&password=ZZZZZZZZZZ==&type=command&param=udevice&idx=' + str(temp_idx) + '&nvalue=0&svalue=' + str(clim_temp_actuelle)
    r = requests.get(url)
    print(r)
    
    url='https://myserver:myport/json.htm?username=YYYYYYYYYY==&password=ZZZZZZZZZZZZZZZZZZZZ==&type=command&param=udevice&idx=' + str(set_point_idx) + '&nvalue=0&svalue=' + str(clim_temp_set)
    r = requests.get(url)
    print(r)
    

if __name__ == "__main__":
    main()
To find the value of your device you had to run
print (CannesCoreail.get_devices())

Hope to help

Xavier

Re: Intesisbox/Intesishome with Domoticz

Posted: Sunday 22 September 2019 16:39
by drake
CV8R wrote: Monday 19 August 2019 10:39 Hi All,

I am in no way a programmer but took the risk and bought a IntesisBox PA-RC2-WMP-1 which is matched to my Panasonic whole home inverter in the hope of getting a plugin working and learning something along the way.

The PA-AC-RC2-WMP-1 uses the WMP protocol and I am sure the WMP protocol is standard across the IntesisBox range. Good news is that I have the plugin working and it feels very tightly integrated to Domoticz. I have been tweaking over a number of months but generally works well for me. :D

Connected is way, way, sooooo much better than the timer that comes standard with the unit.

It supports:
Power: On|Off
Mode: Auto|Heat|Dry|Cool|Fan
Fan: Auto|1|2|3
Set temp
Ambient temp
Error LED and Error Message (later is untested because the Pana AC has never gone into error state)

It reads out the vanes limits to the log but does nothing with them.

So some of it is hard coded but you could easily adapt to your unit.

I am happy to share the code if you are willing to go the WMP route. My unit does not have vanes for left/right and or up/down, since it is mounted in the roof space and has ceiling ducts in each room. This will mean no control for the vanes on units with a wall mounted indoor unit. It would be simple to add control.

Cheers
CV8R
Thanks CV8R!! Good news for all of us... ;)

I adquired a FJ-RC-WMP-1 and I integrated with Domoticz with some scripts. One to receive info from IntesisBox and others to send commands to the unit. Basically I am using netcat as communication tool between IntesisBox and my R3. It is working for me, I have sensors and switches updated in Domoticz and I have the control of the AC unit. The installation and configuration of switches and sensors are totally manual, and if you don't follow the instructions literally your installation could not work fine (many points of fail)

Now I'm inmersed in a new proyect making a plugin totally integrated with domoticz. No extra software needed and automatic installation. But this will take some time to have a first working version. At the moment, all switches and sensors are created in Domoticz automatically, and I can read intesis status... a lot of work to do at the time...
I'm testing the plugin in Raspbian and Debian, when a working version could release I'll try to test it on Windows and MAC.

As your, my AC has ducts and no vanes, but I'll try to integrate them in the plugin.

If you want to colaborate with the plugin ask me...

Regards

Re: Intesisbox/Intesishome with Domoticz

Posted: Sunday 22 September 2019 23:25
by CV8R
Hi, here is my plugin. I'm sure its not pretty but it works!

Copy it into a folder in your plugins directory, restart domoticz and see how you go.

Code: Select all


# Basic Python Plugin Example
#
# Author: GizMoCuz
#
"""
<plugin key="BasePlug" name="IntesisBox WMP-1 Protocol" author="CV8R" version="0.0.9" >
	<description>
		<h2>IntesisBox WMP-1</h2><br/>
		<ul style="list-style-type:square">
			<li>IntesisBox WMP-1 interface for air conditioners into IP based control systems</li>
		</ul>
		<ul style="list-style-type:square">
		<h3>Configuration</h3><br/>
			<li>IP Address and Port number default 3310 </li>
		</ul>
	</description>
	<params>
		<param field="Address" label="IP Address" width="200px" required="true" default=""/>
		<param field="Port" label="Port" width="30px" required="true" default="3310"/>
		<param field="Mode1" label="Debug" width="75px">
			<options>
				<option label="True" value="Debug"/>
				<option label="False" value="Normal"  default="true" />
			</options>
		</param>
	</params>
</plugin>
"""
from typing import List


# Global var definitions
InitHeartbeatCount = 0
unitmode = "N/A"
oustandingPings = -1
lastHeartbeat = 0


# Limits as Global vars
minTempLimit = 180
maxTempLimit = 280

import Domoticz
import base64
import datetime
import re

class BasePlugin:
	enabled = True
	powerOn = 0
	runCounter = 0


	WMPConn = None
	oustandingPings = 0
	lastHeartbeat = datetime.datetime.now()

	def __init__(self):
		#self.var = 123
		return

	def onStart(self):
		Domoticz.Log("onStart called")

		Domoticz.Heartbeat(20) # Set heartbeat interval slower than default

		if Parameters["Mode1"] == "Debug":
			Domoticz.Debugging(1)

		if (len(Devices) == 0):
			Domoticz.Device(Name="Power", Unit=1, Image=16, TypeName="Switch", Used=1).Create()
			Domoticz.Device(Name="Ambient Temp", Unit=2, TypeName="Temperature", Used=1).Create()

			Options = {"LevelActions" : "|||||",
						"LevelNames" : "|Auto|Heat|Dry|Cool|Fan",
						"LevelOffHidden" : "true",
						"SelectorStyle" : "0"}
			
			Domoticz.Device(Name="Mode", Unit=3, TypeName="Selector Switch", Image=16, Options=Options, Used=1).Create()
			
			Options = {"LevelActions" : "||||",
						"LevelNames" : "|Auto|L1|L2|L3",
						"LevelOffHidden" : "true",
						"SelectorStyle" : "0"}

			Domoticz.Device(Name="Fan Speed", Unit=4, TypeName="Selector Switch", Image=7, Options=Options, Used=1).Create()

			Domoticz.Device(Name="Set Temp", Unit=5, Type=242, Subtype=1, Image=16, Used=1).Create()

			Domoticz.Device(Name="Error LED", Unit=6,  Image=13, TypeName="Switch", Used=1).Create()
			Domoticz.Device(Name="Error Text", Unit=7, TypeName="Text", Used=1).Create()

			Domoticz.Log("Device created.")

		DumpConfigToLog()

	def onStop(self):
		Domoticz.Log("onStop called")

	def onConnect(self, Connection, Status, Description):
		Domoticz.Log("onConnect called")
		global ConnectState
		Domoticz.Log("Connecting")
		if (Connection == self.WMPConn):
			if (Status == 0):
				Domoticz.Log("Connected successfully to: " + Connection.Address + ":" + Connection.Port)
				self.WMPConn.Send('ID\n') # Get ID at startup
		else:
			if (Description.find("Only one usage of each socket address") > 0):
				Domoticz.Log(Connection.Address + ":" + Connection.Port + " is busy, waiting.")
			else:
				Domoticz.Log("Failed to connect (" + str(Status) + ") to: " + Connection.Address + ":" + Connection.Port + " with error: " + Description)
			self.WMPConn = None

	def onMessage(self, Connection, Data):
		Domoticz.Debug("onMessage called")
		global unitmode
		global oustandingPings
		global lastHeartbeat
		global minTempLimit
		global maxTempLimit

		strData = Data.decode("utf-8", "ignore")
		Domoticz.Debug("onMessage called with Data: '" + str(strData) + "'")
		#msgDataListRaw = re.split(r':+|,', strData)  # type: List[str]
		msgDataListRaw = re.split(r':+|,+|\[+|\]', strData)  # split string to list of strings
		msgDataList = list(filter(None, msgDataListRaw)) # Remove consecutive delimiters note: filter does not return a list, use list to turn into list
		# Dump stripped messages in to Domoticz Log
		count = 0
		for msgData in msgDataList:
			Domoticz.Debug("Stripped Message[" + str(count) + "] = " + msgData ) # Log the messages incoming and their stripped count
			count = count + 1

		Domoticz.Debug("Resetting Ping to 0")
		oustandingPings = 0  # Reset ping counter onmessage for making sure connection is up in Heartbeat

		# Is it a status update

		if (msgDataList[0] == 'ACK'):
			Domoticz.Debug("Message Acknowledged with response: " + msgDataList[0])
		elif (msgDataList[0] == 'ERR'):
			Domoticz.Error("WMP Message ########## SENDING MESSAGE ERROR ########## with response: " + msgDataList[0])
			Devices[6].Update(nValue=1, sValue="100") # Set the Error LED switch to ON to flag for a send error
		elif (msgDataList[0] == 'LIMITS'): #Get the limits from the AC unit
			DataValues = '|'.join(msgDataList[2:])
			if (msgDataList[1] == 'ONOFF'): #Get the ONOFF limits from the AC unit
				Domoticz.Log("ONOFF Limits from unit: " + DataValues)
			elif (msgDataList[1] == 'MODE'): #Get the MODE limits from the AC unit
				Domoticz.Log("MODE Limits from unit: " + DataValues)
			elif (msgDataList[1] == 'FANSP'): #Get the FANSP limits from the AC unit
				Domoticz.Log("FANSP Limits from unit: " + DataValues)
			elif (msgDataList[1] == 'VANEUD'): #Get the VANEUD limits from the AC unit
				Domoticz.Log("VANEUD Limits from unit: " + DataValues)
			elif (msgDataList[1] == 'VANELR'): #Get the VANELR limits from the AC unit
				Domoticz.Log("VANELR Limits from unit: " + DataValues)
			elif (msgDataList[1] == 'SETPTEMP'): #Get the SETPTEMP temp limits from the AC unit
				Domoticz.Debug("SETPTEMP Temp limit values from unit: " + DataValues)
				minTempLimit = int(msgDataList[2])
				maxTempLimit = int(msgDataList[3])
				Domoticz.Status("Min Temp Limit: " + str(minTempLimit) + " Max Temp Limit: " + str(maxTempLimit))
		if (msgDataList[0] == 'CHN'):
			Domoticz.Debug("Status Update - Unit: " + msgDataList[1] + " Function: " + msgDataList[2] + " Value = " + msgDataList[3])
			# Update the status to Domoticz
			if (msgDataList[2] == 'ONOFF'):
				if (msgDataList[3] == 'ON'):
					Domoticz.Status("Update status to On")
					Devices[1].Update(nValue=1, sValue="100") # AC Power
				elif (msgDataList[3] == 'OFF'):
					Domoticz.Status("Update status to Off")
					Devices[1].Update(nValue=0, sValue="0")
			elif (msgDataList[2] == 'AMBTEMP'):
				ambtemp = str(float(msgDataList[3])/10)
				Domoticz.Log("Ambient temp")
				Domoticz.Debug("Current ambient temp: " + ambtemp + " Degrees")
				Devices[2].Update(nValue=0, sValue=ambtemp)
				#Domoticz.Debug("Resetting Ping to 0") # using AMBTEMP
				#oustandingPings = 0 # Reset ping counter for making sure connection is up in Heartbeat
			elif (msgDataList[2] == 'SETPTEMP'):
				settemp = str(int(msgDataList[3])/10)
				if (unitmode != 'FAN'):
					Domoticz.Status("Set temp is set to: " + settemp + " Degrees")
					Devices[5].Update(nValue=1, sValue=settemp) # Update the temp display in the set temp device
				else:
					Domoticz.Debug("FAN MODE setting temp to not display")
					Devices[5].Update(nValue=1, sValue="22")  # N/A to have a temp displayed
			elif (msgDataList[2] == 'MODE'):
				unitmode = msgDataList[3]
				if (unitmode == "AUTO"):
					Domoticz.Status("Mode to: " + unitmode)
					Devices[3].Update(nValue=1, sValue="10") # Auto
				elif (unitmode == "HEAT"):
					Domoticz.Status("Mode to: " + unitmode)
					Devices[3].Update(nValue=1, sValue="20") # Heat
				elif (unitmode == "DRY"):
					Domoticz.Status("Mode to: " + unitmode)
					Devices[3].Update(nValue=1, sValue="30") # Dry
				elif (unitmode == "COOL"):
					Domoticz.Status("Mode to: " + unitmode)
					Devices[3].Update(nValue=1, sValue="40") # Cool
				elif (unitmode == "FAN"):
					Domoticz.Status("Mode to: " + unitmode)
					Devices[3].Update(nValue=1, sValue="50") # Fan
				Devices[3].Refresh()
			elif (msgDataList[2] == 'FANSP'):
				fspeed = msgDataList[3]
				if (fspeed == "AUTO"):
					Domoticz.Status("Fan Speed to: " + fspeed)
					Devices[4].Update(nValue=1, sValue="10") # Fan Auto
				elif (fspeed == "1"):
					Domoticz.Status("Fan Speed to: " + fspeed)
					Devices[4].Update(nValue=1, sValue="20") # Fan Level 1
				elif (fspeed == "2"):
					Domoticz.Status("Fan Speed to: " + fspeed)
					Devices[4].Update(nValue=1, sValue="30") # Fan Level 2
				elif (fspeed == "3"):
					Domoticz.Status("Fan Speed to: " + fspeed)
					Devices[4].Update(nValue=1, sValue="40") # Fan Level 3
				Devices[4].Refresh()
			elif (msgDataList[2] == 'VANEUD'):
				vaneud = msgDataList[3]
				Domoticz.Status("Vane Up/Down: " + vaneud)
			elif (msgDataList[2] == 'VANELR'):
				vanelr = msgDataList[3]
				Domoticz.Status("Vane Left/Right: " + vanelr)
			elif (msgDataList[2] == 'ERRSTATUS'):
				errorstatus = msgDataList[3]
				if (errorstatus != "OK"):
					Domoticz.Status("Error Status: " + errorstatus)
					Devices[6].Update(nValue=1, sValue="100")  # Set the Error LED switch to ON to flag for an ERROR
				elif (errorstatus == "OK"):
					Domoticz.Status("Error Status: " + errorstatus)
					Devices[6].Update(nValue=0, sValue="0")  # Set the Error LED switch to OFF to clear ERROR
			elif (msgDataList[2] == 'ERRCODE'):
				errorcode = msgDataList[3]
				Domoticz.Status("Error Code: " + errorcode)
				Devices[7].Update(nValue=1, sValue=errorcode)  # Set error text
			else:
				Domoticz.Error("Unrecognised status command")

	def onCommand(self, Unit, Command, Level, Hue):
		Domoticz.Log("onCommand called for Unit " + str(Unit) + ": Parameter '" + str(Command) + "', Level: " + str(Level))

		if (Unit == 1):
			if (Command == "On"):
				Domoticz.Status("Sending Power ON")
				self.powerOn = 1
				self.WMPConn.Send('SET,1:ONOFF,ON\n')
			elif(Command == "Off"):
				Domoticz.Status("Sending Power OFF")
				self.powerOn = 0
				self.WMPConn.Send('SET,1:ONOFF,OFF\n')
		elif (Unit == 3):
			if (Command == "Set Level"):
				Domoticz.Debug("Sending Mode")
				if (str(Level) == '10'):
					Domoticz.Status("Sending Mode Auto")
					self.WMPConn.Send('SET,1:MODE,auto\n')
				elif (str(Level) == '20'):
					Domoticz.Status("Sending Mode Heat")
					self.WMPConn.Send('SET,1:MODE,heat\n')
				elif (str(Level) == '30'):
					Domoticz.Status("Sending Mode Dry")
					self.WMPConn.Send('SET,1:MODE,dry\n')
				elif (str(Level) == '40'):
					Domoticz.Status("Sending Mode Cool")
					self.WMPConn.Send('SET,1:MODE,cool\n')
				elif (str(Level) == '50'):
					Domoticz.Status("Sending Mode Fan")
					self.WMPConn.Send('SET,1:MODE,fan\n')
			self.WMPConn.Send('LIMITS:SETPTEMP\n') # Check temp limits again when changing modes
		elif (Unit == 4):
			if (Command == "Set Level"):
				Domoticz.Debug("Sending Fan Speed")
				if (str(Level) == '10'):
					Domoticz.Status("Sending Fan Speed Auto")
					self.WMPConn.Send('SET,1:FANSP,AUTO\n')
				elif (str(Level) == '20'):
					Domoticz.Status("Sending Fan Speed Level 1")
					self.WMPConn.Send('SET,1:FANSP,1\n')
				elif (str(Level) == '30'):
					Domoticz.Status("Sending Fan Speed Level 2")
					self.WMPConn.Send('SET,1:FANSP,2\n')
				elif (str(Level) == '40'):
					Domoticz.Status("Sending Fan Speed Level 3")
					self.WMPConn.Send('SET,1:FANSP,3\n')
		elif (Unit == 5):
			if (Command == "Set Level"):
				settemp = Level
				Domoticz.Debug("String of Set Temp raw value = " + str(Level))
				settemp = round((int((float(settemp) * 10)))/5)*5 #includes complex rounding to nearest 5
				Domoticz.Debug("Set Temp converted value = " + str(settemp))
				if settemp < minTempLimit: #Adjusting for minLimit of unit
					Domoticz.Status("Set temp point less than min limit setting to min value = " + str(minTempLimit / 10) + " Degrees")
					settemp = minTempLimit #Send the minimum of unit
				if settemp > maxTempLimit: #Adjusting for minLimit of unit
					Domoticz.Status("Set temp point greater than max limit setting to max value = " + str(maxTempLimit / 10) + " Degrees")
					settemp = maxTempLimit
			Domoticz.Status("Setting Temp to: " + str(settemp / 10) + " Degrees")
			Domoticz.Debug("Sending Set Temp to: " + str(settemp))
			self.WMPConn.Send('SET,1:SETPTEMP,' + str(settemp) + '\n')
		elif (Unit == 6):
			if (Command == "Off"):
					Domoticz.Log("User cleared the ERROR Status LED")
					Devices[6].Update(nValue=0, sValue="0")  # Set the Error LED switch to Off
		else:
			Domoticz.Error("No command available to send")

	def onNotification(self, Name, Subject, Text, Status, Priority, Sound, ImageFile):
		Domoticz.Log("Notification: " + Name + "," + Subject + "," + Text + "," + Status + "," + str(Priority) + "," + Sound + "," + ImageFile)

	def onDisconnect(self, Connection):
		Domoticz.Log("onDisconnect called")
		self.WMPConn = None

	def onHeartbeat(self):
		global InitHeartbeatCount  # Counter for first heartbeats
		global oustandingPings # Counter for the Pings for check alive using AMBTEMP
		global lastHeartbeat
		Domoticz.Debug("onHeartbeat called")
		Domoticz.Debug("onHeartbeat called, last response seen " + str(oustandingPings) + " heartbeats ago.")
		Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount))
		lastHeartbeat = datetime.datetime.now()
		if (self.WMPConn == None):
			Domoticz.Log("Connect to WMP")
			InitHeartbeatCount = 0  # reset heartbeat count
			oustandingPings = -1 # reset ping count
			self.handleConnect()
		else:
			if (self.WMPConn.Name == "WMP_Connection") and (self.WMPConn.Connected()):
				oustandingPings = oustandingPings + 1  # Increment Ping Counter, reset at AMPTEMP Status
				if InitHeartbeatCount <= 6:
					InitHeartbeatCount = InitHeartbeatCount + 1
					Domoticz.Debug("Heartbeat Init Count Incremented now = " + str(InitHeartbeatCount))
					if InitHeartbeatCount == 1: #Need to delay these inital messages or some are missed
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting ONOFF")
						self.WMPConn.Send('GET,1:ONOFF\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting MODE")
						self.WMPConn.Send('GET,1:MODE\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting SETPTEMP")
						self.WMPConn.Send('GET,1:SETPTEMP\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting FANSP")
						self.WMPConn.Send('GET,1:FANSP\n')
					if InitHeartbeatCount == 3:
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting VANEUD")
						self.WMPConn.Send('GET,1:VANEUD\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting VANELR")
						self.WMPConn.Send('GET,1:VANELR\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting ERRSTATUS")
						self.WMPConn.Send('GET,1:ERRSTATUS\n')
					if InitHeartbeatCount == 4:
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting ERRCODE")
						self.WMPConn.Send('GET,1:ERRCODE\n')
					if InitHeartbeatCount == 5:
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS ONOFF")
						self.WMPConn.Send('LIMITS:ONOFF\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS MODE")
						self.WMPConn.Send('LIMITS:MODE\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS FANSP")
						self.WMPConn.Send('LIMITS:FANSP\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS VANEUD")
						self.WMPConn.Send('LIMITS:VANEUD\n')
					if InitHeartbeatCount == 6:
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS VANELR")
						self.WMPConn.Send('LIMITS:VANELR\n')
						Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount) + " Getting LIMITS SETPTEMP")
						self.WMPConn.Send('LIMITS:SETPTEMP\n')
						Domoticz.Heartbeat(20)  # Extending heartbeat at last Limit
				if InitHeartbeatCount == 7:  # when count gets to this number and is connected, it will not increment and commence AMBTEMP Heartbeats
					Domoticz.Debug("Getting Ambient Temp")
					self.WMPConn.Send('GET,1:AMBTEMP\n')  # Get AMBTEMP at Heartbeat to confirm connected
			if (oustandingPings == 3):
				Domoticz.Log(self.WMPConn.Name + " has not responded to 3 heartbeats terminating connection.")
				if (self.WMPConn.Connected()):
					self.WMPConn.Disconnect()
					Domoticz.Debug("Heartbeat Init Count = " + str(InitHeartbeatCount))
				self.WMPConn = None


	def handleConnect(self):
		self.WMPConn = None
		Domoticz.Debug("Settings shorter heartbeat to speed up initialisation")
		Domoticz.Heartbeat(5)  # Setting the inital hearbeat timeout used for delaying startup messages - extended in onHeartbeat after counter reached
		self.WMPConn = Domoticz.Connection(Name="WMP_Connection", Transport="TCP/IP", Protocol="Line", Address=Parameters["Address"], Port=Parameters["Port"])
		self.WMPConn.Connect()


global _plugin
_plugin = BasePlugin()

def onStart():
	global _plugin
	_plugin.onStart()

def onStop():
	global _plugin
	_plugin.onStop()

def onConnect(Connection, Status, Description):
	global _plugin
	_plugin.onConnect(Connection, Status, Description)

def onMessage(Connection, Data):
	global _plugin
	_plugin.onMessage(Connection, Data)

def onCommand(Unit, Command, Level, Hue):
	global _plugin
	_plugin.onCommand(Unit, Command, Level, Hue)

def onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile):
	global _plugin
	_plugin.onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile)

def onDisconnect(Connection):
	global _plugin
	_plugin.onDisconnect(Connection)

def onHeartbeat():
	global _plugin
	_plugin.onHeartbeat()

	# Generic helper functions
def DumpConfigToLog():
	for x in Parameters:
		if Parameters[x] != "":
			Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
	Domoticz.Debug("Device count: " + str(len(Devices)))
	for x in Devices:
		Domoticz.Debug("Device:           " + str(x) + " - " + str(Devices[x]))
		Domoticz.Debug("Device ID:       '" + str(Devices[x].ID) + "'")
		Domoticz.Debug("Device Name:     '" + Devices[x].Name + "'")
		Domoticz.Debug("Device nValue:    " + str(Devices[x].nValue))
		Domoticz.Debug("Device sValue:   '" + Devices[x].sValue + "'")
		Domoticz.Debug("Device LastLevel: " + str(Devices[x].LastLevel))
	return

Re: Intesisbox/Intesishome with Domoticz

Posted: Tuesday 24 September 2019 19:15
by drake
Hi CV8R!!

You have done a very good job!!! Plugin works perfectly.
I'm trying to find any error but no one found :lol:

I will make a change in temperature selector, when fan is active could show temp "Off"

Regards

Re: Intesisbox/Intesishome with Domoticz

Posted: Wednesday 25 September 2019 1:11
by CV8R
You're welcome. I'm glad my tinkering has helped someone else!

Re the Fan, I did start looking at setting the devices off when the unit was off but ran into problems with the setting the selector off and remembering the status of the selector. In the end I decided it wasn't worth the complexity and left it as is.

I just noticed that the fan levels are added as L1, L2 and L3 at initialisation.

Code: Select all

"LevelNames" : "|Auto|L1|L2|L3"
I would change these to 1, 2 and 3 dropping the L. It simplifies things later such as Google Home integration. I've changed mine in the selector but forgot to change the plugin code.

Cheers
CV8R

Re: Intesisbox/Intesishome with Domoticz

Posted: Thursday 16 January 2020 17:45
by kitopopo
Hi frirnds,

A question. This plugin and scripts can work with intesis home IS-IR-WIFI-1? Y have 2 units for work with two airs conditioner.

Thanks in advanced.

Best regards

Re: Intesisbox/Intesishome with Domoticz

Posted: Friday 17 January 2020 1:40
by CV8R
Hi @kitopopo,

My plugin will not work with your IntesisHome which works via their cloud service. My plugin is for IntesisBox which is for direct IP control.

The post by @xavierlp is where you need to start.

Regards,
CV8R

Re: Intesisbox/Intesishome with Domoticz

Posted: Saturday 18 January 2020 13:20
by kitopopo
xavierlp wrote: Thursday 22 August 2019 16:24 Hello

I could integrate IntesisHome to my domoticz.

What you need is
1- Python 3.5
2- IntesiHome library / You can find the IntesisHome library here: https://github.com/jnimmo/pyIntesisHome
3- Python script with json api of domoticz


So first, In the directory home/pi/domoticz/scripts/python copy the file pyintesishome.py and change properties to be executable.
Second create a script in the same directory like this

Code: Select all

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-

import requests
from optparse import OptionParser
from pyintesishome import IntesisHome	
import sys
import pycurl
import re
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import time
from datetime import datetime
try:
    from io import BytesIO
except ImportError:
    from StringIO import StringIO as BytesIO

def main():

    username="xxxxxxxx" # IntesisHome login
    password="yyyyyyyy" # IntesisHome password
    idd = 111111111111 # IntesisHome device id
    CannesCorail = None

    temp_idx = 638  # Domoticz IDX
    set_point_idx = 637 # Domoticz IDX

    CannesCorail = IntesisHome(username, password)
    CannesCorail.poll_status()

    print(CannesCorail.get_setpoint(idd))
    print(CannesCorail.get_temperature(idd))
	
    clim_temp_set = CannesCorail.get_setpoint(idd)
    clim_temp_actuelle = CannesCorail.get_temperature(idd)
  
    #passage de la temperature récupérée a Domoticz
    url='https://myserver:myport/json.htm?username=YYYYYYYYYYY==&password=ZZZZZZZZZZ==&type=command&param=udevice&idx=' + str(temp_idx) + '&nvalue=0&svalue=' + str(clim_temp_actuelle)
    r = requests.get(url)
    print(r)
    
    url='https://myserver:myport/json.htm?username=YYYYYYYYYY==&password=ZZZZZZZZZZZZZZZZZZZZ==&type=command&param=udevice&idx=' + str(set_point_idx) + '&nvalue=0&svalue=' + str(clim_temp_set)
    r = requests.get(url)
    print(r)
    

if __name__ == "__main__":
    main()
To find the value of your device you had to run
print (CannesCoreail.get_devices())

Hope to help

Xavier
Hi @xavierlp ,


I am trying to follow in his steps in a raspberry pi4 and intesis home IS-IR-WIFI-1with raspbian buster but probably i make somothing wrong:

1) I download the library here: https://github.com/jnimmo/pyIntesisHome
2) In the directory home/pi/domoticz/scripts/python copy the file pyintesishome.py and change properties to be executable. also i make this in your scriptfile.py
3) I have created yourscriptfile.py in the same folder (directory)
4) I restar domoticz service

After make these steps i don found any change. I have inserted my user and password in your script but same result.
I don't know the idd of my devices, inside of the intesishome web i can found the MAC adress but no the idd

I have executed: print (CannesCoreail.get_devices()) but error message is received (name 'CannesCoreail' is not defined) , also i test python print (CannesCoreail.get_devices()) and running firs python and after writing print (CannesCoreail.get_devices()).

Any devices appear in domoticz after follow your steps. Can you helpme please? i am very interest in use intesishome with domoticz.

I wait news from you.

Thanks in advanced



Any idea for use my 2 devices of intesis home with domoticz?

Re: Intesisbox/Intesishome with Domoticz

Posted: Saturday 18 January 2020 13:23
by kitopopo
CV8R wrote: Friday 17 January 2020 1:40 Hi @kitopopo,

My plugin will not work with your IntesisHome which works via their cloud service. My plugin is for IntesisBox which is for direct IP control.

The post by @xavierlp is where you need to start.

Regards,
CV8R
Hi @ CV8R, i try with the @xavierlp but no satisfactory result , i have write to @xavierlp. I wish someone could help me. Thanks for your reply

Re: Intesisbox/Intesishome with Domoticz

Posted: Tuesday 21 January 2020 2:06
by xavierlp
Hello

You had to change cannes corail by the name of your facility

Cannes corail is mine


Envoyé de mon iPhone en utilisant Tapatalk

Re: Intesisbox/Intesishome with Domoticz

Posted: Tuesday 21 January 2020 2:19
by xavierlp
xavierlp wrote:Hello

You had to change cannes corail by the name of your facility

Cannes corail is mine Image


Envoyé de mon iPhone en utilisant Tapatalk
You had to have the same name between controller = IntesisHome(username, password)

And controler.get_devices

Hope to help

Xavier


Envoyé de mon iPhone en utilisant Tapatalk

Re: Intesisbox/Intesishome with Domoticz

Posted: Sunday 31 May 2020 11:35
by DrMacabre
Hello everyone,

I’m going to have a toshiba AC installed tomorrow, anything else needed beside the TO-RC-WMP-1 module from intesis to have it working with domoticz ?

Thanks.

Re: Intesisbox/Intesishome with Domoticz

Posted: Monday 01 June 2020 12:48
by xavierlp
Hello @DrMacabre

Domoticz will "discuss" with the intesis module directly.
Then the module will discuss with your AC.

The two steps you have to do is to set the wifi on the module and set up an account on intesis.

Hope to help

Re: Intesisbox/Intesishome with Domoticz

Posted: Monday 01 June 2020 13:44
by CV8R
Hi @DrMacabre,

If you are using an Intesis WMP-1 device then you will not require an Intestishome login or account. The Intesis Gateway WiFi (ASCII) Interface unit piggy backs off the wiring from a controller and connects directly to your WiFi network. The gateway was called Intesisbox but looks to have changed names now but still uses the WMP protocol. The WMP protocol provides a direct connection from the Domoticz server to the WMP device. If your Domoticz server is on the same WiFi network then the plugin that I wrote should allow you to control it.

You will need to copy the plugin to your plugins directory on the Domoticz server, inside a folder (important) and then restart Domoticz. Go to your hardware and add the IntesisBox WMP-1 Protocol device add IP and Port number.

You can first try the Configuration software tool that is available on the Intesis website to ensure you can discover and control the A/C unit via the WMP Device. If the configuration tool works, then the plugin should.

CV8R

Re: Intesisbox/Intesishome with Domoticz

Posted: Monday 01 June 2020 15:52
by DrMacabre
Ok, pretty straight forward. Thank you guys 👍🏻

Re: Intesisbox/Intesishome with Domoticz

Posted: Tuesday 04 August 2020 11:58
by DrMacabre
CV8R wrote: Monday 01 June 2020 13:44 Hi @DrMacabre,

If you are using an Intesis WMP-1 device then you will not require an Intestishome login or account. The Intesis Gateway WiFi (ASCII) Interface unit piggy backs off the wiring from a controller and connects directly to your WiFi network. The gateway was called Intesisbox but looks to have changed names now but still uses the WMP protocol. The WMP protocol provides a direct connection from the Domoticz server to the WMP device. If your Domoticz server is on the same WiFi network then the plugin that I wrote should allow you to control it.

You will need to copy the plugin to your plugins directory on the Domoticz server, inside a folder (important) and then restart Domoticz. Go to your hardware and add the IntesisBox WMP-1 Protocol device add IP and Port number.

You can first try the Configuration software tool that is available on the Intesis website to ensure you can discover and control the A/C unit via the WMP Device. If the configuration tool works, then the plugin should.

CV8R
hello,

i finally received my intesisbox, set it up on my wifi network but that's how far i've managed to go. I tried to get the device on the configuration software tool with no success. I can see the device on my network but can't get into it with it's IP. Before setting the network, i checked a few things on the web interface, it was communicating with my AC. Did i miss something ?

Re: Intesisbox/Intesishome with Domoticz

Posted: Tuesday 04 August 2020 13:50
by CV8R
If the Intesisbox wmp config tool cannot connect to the intesisbox then there isn't much I can help with. I recommend contacting their support. The plugin will not work unless the config tool can connect as they use the same WMP protocol.


When I open the IBOX-WMP-CONFIG application I get a spinner and a window that says "obtaining data". That always times out and I need to select the check box for Periodic Discover, then the Intesisbox appears in the tool.

Good luck!

CV8R