Bryant Evolution Connex Control (Thermostat)

Posted on
Mon Jan 04, 2016 3:31 pm
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Different Computers wrote:
It's awesome and amazing someone is making this happen for Indigo. I'm not aware of any other HA system that can talk to Carrier Infinity. Pro ones, sure, but not end user systems.

This may well be the ultimate persuasion necessary for me to jump to Indigo. Even though my Carrier system is just one zone!

Well, look at that -- we've found one user more than I expected has found the script potentially useful!

Let me know if you have any questions -- I actually understand this bit of code well.

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Tue Jan 05, 2016 7:30 pm
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

Still haven't pulled the trigger on Indigo, mostly because I don't have a free stretch of time to begin. But this does more for making me want to switch than most anything else.

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Wed Jan 13, 2016 7:48 pm
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Now that I have a passing understanding of queues and threading, I have redesigned the script to use a thread for the serial communications. In earlier version, I had several functions that did handoffs via semaphores for various actions. For the most part, user input, background updates and error correction are all stacked in a priority queue and dealt with by the serialTasks function.

I also had some complex code that determined which system / zone are being worked on -- I have basically eliminated this check and assume the commands being issued are correct for the current zone.

Now that the serialTasks function is running without delays, it can work through the HVAC's entire command set of one system and eight zones in a little over two minutes. If you had all of the options (humidifier, UV light, etc. and a second System (16 zones)), it looks like it would take about 4.5 minutes to go through all of the functions.

I removed almost all of my regular expression code and replaced them with str functions. This wound up being a lot easier for me to debug.

Code: Select all
#! /usr/bin/python

# Bryant Evolution Connex / Carrier Infinity script for Indigo
#
#
#
# Requirements:
#
#    Bryant Evolution Connex or Carrier Infinity Communicating HVAC System
#   System Access Module (SAM) SYSTXCCRCT01 or SYSTXCCSAM01 (PERHAPS OTHERS)
#   StarTech NETRS2321P IP to serial module
#
# Remote Access Protocol Documentation:  http://dms.hvacpartners.com/docs/1009/Public/02/APSAM01-01.pdf

import socket
import re
import time
import datetime
import indigo
import sys
import threading
import Queue

loopTime = datetime.datetime.now()

# Connex / Infinity can support two systems.  Change to ("S1", "S2") if this applies. Comma MUST be present even if only one system
arrSys = (
   "S1",
#   "S2"
   )

# Global system numeric variables.  Comment out unavailable features.  Remember NO COMMA after last variable.
arrGloNum = (
   "Z1RH",       # Relative Humidity. Zone 1 is only zone that reports humidity
   "OAT",          # Outside Air Temperature
#   "Z1RHTG",       # Relative Humidity Target
   "FILTRLVL",    # Filter life used
   "VACDAYS",       # Number of Vacation Days
   "VACMINT",       # Vacation Minimum Temp
   "VACMAXT",       # Vacation Maximum Temp
   "VACMINH",       # Vacation Minimum Humidity
   "VACMAXH",       # Vacation Maximum Humidity
   "CFGDEAD",      # Thermostat deadband
#   "CFGCPH",       # Maximum thermostat cycles per hour (Not useful on Evolution Connex)
#   "HUMLVL",       # Humidifier pad life
#   "UVLVL"         # UV lamp life
   "ZONE"          # Zone displayed on touchscreen
   )

# Global system text variables                              
arrGloTxt = (
#   "ZONE",
   "MODE",       # System Mode (HEAT, COOL, AUTO, OFF, EHEAT)
   "HUMID",       # Humidifier state
   "BLIGHT",       # System LCD Backlight
   "FILTRRMD",    # Filter reminder
   "VACFAN",       # Vacation fan setting (AUTO, LOW, MED, HIGH)
   "CFGEM",       # English / Metric setting (Send E or M, returns F or C)
   "CFGAUTO",       # System Automatic mode
   "CFGTYPE",       # System type (COOL, HEAT, HEATCOOL)
   "CFGPGM",       # Programing enabled?
   "DEALER",       # Dealer name
   "DEALERPH",    # Dealer phone number
   "DAY",          # Day of Week
   "TIME",          # Time of Day
#   "CFGFAN",       # Programmable Fan Setting (Not useful on Evolution Connex)
#   "UVRMD",       # UV Reminder setting
#   "HUMRMD"      # Humidity pad reminder setting
   "VACAT"       # Vacation state
   )   

arrZoneNumPriority = (
   "RT",         # Displayed zone room temperature
   )

# Zone numeric variables
arrZoneNum = (
   "HTSP",       # Zone heat setpoint
   "CLSP"         # Zone cool setpoint
   )

# Zone text variables                                                            
arrZoneTxtPriority = (
   "HOLD",       # HOLD ON sets zone into HOLD permanent. OFF turns HOLD off.
   "UNOCC",       # UNOCC ON sets Zone into AWAY state HOLD permanent. OFF sets into HOME state HOLD permanent. (Use HOLD OFF to turn off UNOCC)
   "OVR",          # State of local (On the Thermostat) override timer
   "FAN"         # Set fan speed (AUTO, LOW, MED, HIGH). AUTO turns continuous fan off.
   )

arrZoneTxt = (
   "OTMR",         # Local override time remaining in hours and minutes.
   "NAME",       # Zone's name
   )                                                         

arrSetupVars = (
   "hvacStop",
   "hvacBusyBackground",
   "hvacBusyForeground",
   "hvacForegroundTask",
   "hvacForegroundState",
   "hvacForegroundZone",
   "hvacDefaultOverrideTime",
   "hvacLastError",
   "hvacLastCommand",
   "hvacLastCommandTime",
   "hvacLastCommandSent",
   "hvacCleanExit",
   "hvacZoneUpdatePriority",
   "hvacForegroundSystem",
   "hvacLastErrorTime",
   "hvacLastLoopTime",
   "hvacLastErrorMessage",
   "hvacQueueSize"
   )

hvacManufacturer = "Bryant"                                                            # Change to Carrier if you have OCD. 
                                                                              # Script works the same.
try:
   indigo.variables.folder.create(hvacManufacturer+" HVAC")                                 # Create Indigo variable folder if necessary
except ValueError:
   pass

try:
   indigo.variables.folder.create(hvacManufacturer+" HVAC Control")                           # Create Indigo control variable folder if necessary
except ValueError:
   pass

#
# Create Indigo Variables if necessary.
#
for i in arrSetupVars:

   try:
      indigo.variable.create(i, value="", folder=str(hvacManufacturer+" HVAC Control"))            # Create control variables if necessary
   except ValueError:
      indigo.variable.updateValue(i, value="")

indigo.variable.updateValue("hvacStop", str(False))
indigo.variable.updateValue("hvacBusyForeground", str(False))
indigo.variable.updateValue("hvacBusyBackground", str(False))
indigo.variable.updateValue("hvacDefaultOverrideTime", value="01:00")
indigo.variable.updateValue("hvacForegroundSystem", value="S1")
indigo.variable.updateValue("hvacLastLoopTime", value="")

End = "\r\n"          # Each message from HVAC terminates in CRLF. Used to ensure data packet is completely received.

HOST2 = 'hvac.bollar.com'
PORT2 = 23
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(7.0)
s.connect((HOST2, PORT2))

#
# Define Queue
#
# q = Queue.Queue(maxsize=0)

pq = Queue.PriorityQueue(maxsize=0)

class job(object):
    def __init__(self, priority, description):
        self.priority = priority
        self.description = description
        return
    def __cmp__(self, other):
        return cmp(self.priority, other.priority)

#
# Get Foreground Tasks raised by Indigo.  Note Queue is passed as (q).
#
def foregroundTasks(pq):
   indigo.server.log("HVAC foregroundTasks : Starting...")
   foreCommand = ""
   zone = ""
   system = ""
   state = ""
   while string.capitalize(indigo.variables["hvacStop"].value) == str(False):
      try:
         if string.capitalize(indigo.variables["hvacBusyForeground"].value) == str(True):
            task = (indigo.variables["hvacForegroundTask"].value)
            zone = (indigo.variables["hvacForegroundZone"].value)
            system = (indigo.variables["hvacForegroundSystem"].value)
            state = (indigo.variables["hvacForegroundState"].value)
            indigo.variable.updateValue("hvacForegroundTask", value="")
            indigo.variable.updateValue("hvacForegroundZone", value="")
            indigo.variable.updateValue("hvacForegroundState", value="")
            indigo.variable.updateValue("hvacBusyForeground", str(False))

            if int(zone) > 0:
               foreCommand = system + "Z" + zone + "OVR" + "?"
               pq.put(job(10, foreCommand))
               if indigo.variables["hvac"+system+"Z"+str(zone)+"OVR"].value == "OFF":
                  foreCommand = system + "Z" + zone + task + "!" + state
                  pq.put(job(11, foreCommand))
                  foreCommand = system + "Z" + zone + "HTSP" + "?"
                  pq.put(job(12, foreCommand))
                  foreCommand = system + "Z" + zone + "CLSP" + "?"
                  pq.put(job(12, foreCommand))
                  foreCommand = system + "Z" + zone + "RT" + "?"
                  pq.put(job(12, foreCommand))
                  foreCommand = system + "Z" + zone + "HOLD" + "?"
                  pq.put(job(14, foreCommand))
                  foreCommand = system + "Z" + zone + "UNOCC" + "?"
                  pq.put(job(14, foreCommand))
                  foreCommand = system + "Z" + zone + "FAN" + "?"
                  pq.put(job(14, foreCommand))
                  indigo.server.log("HVAC foregroundTasks Queue:" + foreCommand + " " + str(pq.qsize()))

               else:
                  indigo.server.log("Zone Override - Ignoring Command :" + foreCommand)
            else:
               foreCommand = system + task + "!" + state
               pq.put(job(10, foreCommand))

            indigo.variable.updateValue("hvacQueueSize", value=str(pq.qsize()))
            indigo.variable.updateValue("hvacZoneUpdatePriority", str(True))

         else:
            time.sleep(0.1)

      except ValueError:
         pass
      except:
         e = sys.exc_info()[0]
         time.sleep(10.0)
         indigo.server.log("HVAC foregroundTasks: " + str(e))
         indigo.variable.updateValue("hvacLastError", value=str(response))
         indigo.variable.updateValue("hvacLastErrorMessage", value=str(e))
         indigo.variable.updateValue("hvacLastErrorTime", value=str(datetime.datetime.now()))
         pass

      finally:
         pass

   indigo.server.log("HVAC foregroundTasks : Stopping...")


#
# Send Serial Tasks raised by Indigo.  Note Queue is passed as (pq).
#
def serialTasks(pq):
   indigo.server.log("HVAC serialTasks : Starting...")
   while string.capitalize(indigo.variables["hvacStop"].value) == str(False):
      if pq.qsize() > 0:
         try:
            queueCommand = pq.get()
            foreCommand = queueCommand.description
            indigo.variable.updateValue("hvacLastCommandSent", value=foreCommand)
            indigo.variable.updateValue("hvacQueueSize", value=str(pq.qsize()))

            s.sendall(foreCommand + End)
            response = receiveHVACValue(s)

            p = re.split(":", response, maxsplit=1) # Breaks response into two groups with : as a delimiter
#            indigo.server.log("HVAC serialTasks: p = " + str(p[0]) + " " + str(p[1]))
            cmd = str(p[0])
            rtn = str(p[1])
             r = filter(str.isdigit, rtn)

             if rtn == "NAK CMD":
                pq.put(job(8, foreCommand))
               indigo.server.log("HVAC serialTasks: Returned NAK CMD: " + str(foreCommand) + " " + str(response))
             if rtn == "NAK VAL":
#                pq.put(job(8, foreCommand))
               indigo.server.log("HVAC serialTasks: Returned NAK VAL: " + str(foreCommand) + " " + str(response))
             if rtn == "NAK":
                pq.put(job(8, foreCommand))
               indigo.server.log("HVAC serialTasks: Returned NAK: " + str(foreCommand) + " " + str(response))
             else:
               if r != "":
                   indigo.variable.updateValue("hvac"+cmd, value=r)
                else:
                   indigo.variable.updateValue("hvac"+cmd, value=rtn)

         except ValueError:
             pq.put(job(8, foreCommand))
#            indigo.server.log("HVAC serialTasks: Returned ValueError: " + str(foreCommand) + " " + str(response))
#            indigo.variable.create("hvac"+str(m.group(0)), value=str(m.group(1)), folder=str(hvacManufacturer+" HVAC"))
         except IndexError:
             pq.put(job(8, foreCommand))
#            indigo.server.log("HVAC serialTasks: Returned IndexError: " + str(foreCommand) + " " + str(response))
         except socket.timeout:
             pq.put(job(8, foreCommand))
#            indigo.server.log("HVAC serialTasks: Returned socket.timeout: " + str(foreCommand) + " " + str(response))
         except:
            e = sys.exc_info()[0]
            time.sleep(0.1)
            indigo.server.log("HVAC serialTasks: " + str(e))
            indigo.server.log("HVAC serialTasks: Returned Other Errors: " + str(foreCommand) + " "  + str(response))
            indigo.variable.updateValue("hvacLastError", value=str(response))
            indigo.variable.updateValue("hvacLastErrorMessage", value=str(e))
            indigo.variable.updateValue("hvacLastErrorTime", value=str(datetime.datetime.now()))
            pass

         finally:
            foreCommand = ""
            indigo.variable.updateValue("hvacLastCommand", value=response)
            indigo.variable.updateValue("hvacLastCommandTime", value=str(datetime.datetime.now()))
#            indigo.server.log("HVAC serialTasks Response: " + response)
            indigo.variable.updateValue("hvacBusyForeground", str(False))

      else:
         time.sleep(0.1)
#         indigo.server.log("HVAC serialTasks waiting...")

   indigo.server.log("HVAC serialTasks : Stopping...")



def getHVACValue(system, zone, command, commandText):
#   indigo.server.log("HVAC getHVACValueLocal foreCommand: " + foreCommand + " " + str(q.qsize()))
   backCommand = ""

   while pq.qsize() > 0:
      if string.capitalize(indigo.variables["hvacStop"].value) == str(True):
         return()
      time.sleep(0.1)

   indigo.variable.updateValue("hvacBusyBackground", str(True))
   #
   # Zone Specific Commands
   #
   if zone > 0:
      backCommand = system+"Z"+str(zone)+command+"?"
   else:
      backCommand = system+command+"?"      

   pq.put(job(20, backCommand))

   indigo.variable.updateValue("hvacLastCommandTime", value=str(datetime.datetime.now()))
   backCommand = ""
   indigo.variable.updateValue("hvacLastCommandTime", value=str(datetime.datetime.now()))
   indigo.variable.updateValue("hvacBusyForeground", str(False))
   return()

#
# Receives and parses data returned from HVAC
# http://code.activestate.com/recipes/408859-socketrecv-three-ways-to-turn-it-into-recvall/
#

def receiveHVACValue(s):
   total_data = []
   response = ""
   while True:
           data = unicode(s.recv(32), errors="ignore")
           if End in data:
               total_data.append(data[:data.find(End)])
               response = "".join(total_data)
               break
           total_data.append(data)
           if len(total_data)>1:
               #check if end_of_data was split
               last_pair=total_data[-2]+total_data[-1]
               if End in last_pair:
                   total_data[-2]=last_pair[:last_pair.find(End)]
                   total_data.pop()
                   break
       return(response)

#
# Set up thread to get foreground tasks from Indigo.  Note it calls the Queue (q) as an arg.
#
t1 = threading.Thread(name='t1', target=foregroundTasks, args=(pq,))
t1.daemon = True
t1.start()

t2 = threading.Thread(name='t2', target=serialTasks, args=(pq,))
t2.daemon = True
t2.start()

#
# Main loop.  Cycles through each zone and global command in sequence.  Each command takes about five seconds to execute.
#
# g = System
# i = Command
# x = Zone

while string.capitalize(indigo.variables["hvacStop"].value) == str(False):

   indigo.variable.updateValue("hvacZoneUpdatePriority", str(False))

   tDelta = datetime.datetime.now() - loopTime
   indigo.variable.updateValue("hvacLastLoopTime", value=str(tDelta))
   loopTime = datetime.datetime.now()

   for g in arrSys:

      for i in arrZoneNumPriority:
         for x in range (1, 9):
            getHVACValue(g, x, i, False)

      for i in arrZoneNum:
         for x in range (1, 9):
            if string.capitalize(indigo.variables["hvacZoneUpdatePriority"].value) == str(False):
               getHVACValue(g, x, i, False)
            else:
               pass

      for i in arrZoneTxtPriority:
         for x in range (1, 9):
            getHVACValue(g, x, i, True)

      for i in arrZoneTxt:
         for x in range (1, 9):
            if string.capitalize(indigo.variables["hvacZoneUpdatePriority"].value) == str(False):            
               getHVACValue(g, x, i, True)
            else:
               pass

      for i in arrGloNum:
         for x in range (1, 2):
            if string.capitalize(indigo.variables["hvacZoneUpdatePriority"].value) == str(False):
               getHVACValue(g, 0, i, False)
            else:
               pass

      for i in arrGloTxt:
            if string.capitalize(indigo.variables["hvacZoneUpdatePriority"].value) == str(False):
               getHVACValue(g, 0, i, True)
            else:
               pass

s.close()
indigo.variable.updateValue("hvacStop", str(False))
indigo.variable.updateValue("hvacBusyBackground", str(False))
indigo.variable.updateValue("hvacBusyForeground", str(False))
indigo.variable.updateValue("hvacCleanExit", str(True))
indigo.server.log(hvacManufacturer + " HVAC Stopped")

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Mon Sep 05, 2016 9:26 pm
hamw offline
Posts: 1212
Joined: Mar 31, 2008

Re: Bryant Evolution Connex Control (Thermostat)

May I ask the status of this script? Is it pretty reliable? I am using Venstar thermostats and they work well. We are currently considering getting a carrier infinity system and it would be great if there were someway it would be controllable.

Posted on
Tue Sep 06, 2016 6:38 am
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

hamw wrote:
May I ask the status of this script? Is it pretty reliable? I am using Venstar thermostats and they work well. We are currently considering getting a carrier infinity system and it would be great if there were someway it would be controllable.

I am the only user as far as I know. the script has worked reliably for me since the last work I did on it in January. It crashes every few weeks with an occasional error that I hasn't taken the time to restart.

Probably the bigger issue is that this isn't a plugin, so there's still some work creating the action groups & triggers to make it do what you need. Having said that, I'm happy to share what I have done, so you can see if you're up for the task.

Otherwise, the Infinity system is awesome and cut our AC bill by 60+ percent. The single unit replaced three older systems and every room is exactly the temperature we want.

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Tue Oct 25, 2016 2:00 pm
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

As winter begins to set in, I'm again considering making the jump to HVAC automation.

Will the script above require any modification if my Carrier Infinity system has only one zone?

Also, is the thermostat replacement something that has to be done by a dealer?

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Tue Oct 25, 2016 4:09 pm
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Different Computers wrote:
As winter begins to set in, I'm again considering making the jump to HVAC automation.

Will the script above require any modification if my Carrier Infinity system has only one zone?

Also, is the thermostat replacement something that has to be done by a dealer?

It should work for a single zone system.

As for installation, what thermostat do you have now? If you have an infinity thermostat now, it should be connecting a couple of wires.

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Wed Oct 26, 2016 6:33 am
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

I have an infinity thermostat, but it's the low-end model, installed circa 2005. No connectivity and the only programming is "raise/lower x° and hold for XX:XX time" and maybe some set schedules.

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Sat Jan 28, 2017 2:25 pm
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

Hey @Bollar, did you really spend north of $1100 for the Remote Access Module SYSTXCCRCT01?

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Sat Jan 28, 2017 2:45 pm
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Different Computers wrote:
Hey @Bollar, did you really spend north of $1100 for the Remote Access Module SYSTXCCRCT01?

I bought it at the same time that I replaced the entire system, so I got a discount - my guess is about $600.

The new system uses 1/3 the electricity of the three old systems, so I'm not complaining.

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Sat Jan 28, 2017 5:26 pm
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

Thanks. My system is in place and not changing, so the cost savings are likely less dramatic.

I see there's now a Wi-Fi version of their thermostat that shares almost the same serial number, costs half as much, and might not need the ethernet converter hardware. Any idea if your scripts would work with it?

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Sat Jan 28, 2017 9:11 pm
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Different Computers wrote:
Thanks. My system is in place and not changing, so the cost savings are likely less dramatic.

I see there's now a Wi-Fi version of their thermostat that shares almost the same serial number, costs half as much, and might not need the ethernet converter hardware. Any idea if your scripts would work with it?


Which one? The Evolution Connex Thermostat? No, my scripts only work with the serial interface board. There have been a couple of people trying to decode the API, but they have had limited success.

https://github.com/acd/infinitive
https://github.com/copy-ninja/SmartThin ... tree/alpha

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Sun Jan 29, 2017 9:40 am
Different Computers offline
User avatar
Posts: 2550
Joined: Jan 02, 2016
Location: East Coast

Re: Bryant Evolution Connex Control (Thermostat)

This one: http://www.hvacpartsoutlet.com/defrostc ... CCITC01-A/

But now that I look in more detail, I see that this charming little $600 thermostat requires an ADDITONAL $1100 module:

Wi-Fi® remote access capability (SYSTXCCITW01-A and SYSTXCCITC01-A)
Supports Infinity® Zoning
Compatible with home automation through the Remote Access Module


Frakking Carrier.

SmartThings refugee, so happy to be on Indigo. Monterey on a base M1 Mini w/Harmony Hub, Hue, DomoPad, Dynamic URL, Device Extensions, HomeKitLink, Grafana, Plex, uniFAP, Fantastic Weather, Nanoleaf, LED Simple Effects, Bond Home, Camect.

Posted on
Sun Jan 29, 2017 11:48 am
Bollar offline
Posts: 528
Joined: Aug 11, 2013

Re: Bryant Evolution Connex Control (Thermostat)

Different Computers wrote:
This one: http://www.hvacpartsoutlet.com/defrostc ... CCITC01-A/

But now that I look in more detail, I see that this charming little $600 thermostat requires an ADDITONAL $1100 module:

Wi-Fi® remote access capability (SYSTXCCITW01-A and SYSTXCCITC01-A)
Supports Infinity® Zoning
Compatible with home automation through the Remote Access Module


Frakking Carrier.

Yikes.

In one of those links in my last message, the guy used a Raspberry Pi to emulate the SAM. Perhaps that's the way to go - and would cost less than $100.

Insteon / Z-Wave / Bryant Evolution Connex /Tesla / Roomba / Elk M1 / SiteSage / Enphase Enlighten / NOAA Alerts

Posted on
Wed May 03, 2017 7:41 pm
shmigator offline
Posts: 7
Joined: May 03, 2017

Re: Bryant Evolution Connex Control (Thermostat)

Has anyone tried Infinitude ? [https://github.com/nebulous/infinitude]
Acts as a proxy for a Carrier WiFi thermostat, giving more or less full control and opening up a local API.

Worked great in my limited tests a few months ago. I was able to interact from an Action Group, and attempted a plugin.
I don't know python at all, but [if no one else wants to make it] with a little elbow grease it seems doable.

It can also read the serial input, but I don't have the carrier hardware for that ( SAM).

Who is online

Users browsing this forum: No registered users and 16 guests