Honeywell EnviraCOM

1,266 views
Skip to first unread message

Mark Olsen

unread,
Jul 17, 2014, 9:08:59 AM7/17/14
to comman...@googlegroups.com

Has anyone worked with the Honeywell EnviraCOM protocol?  I am setting up a system to control a EnviraCOM bus that I currently control with a Philips Pronto.  I have a bunch of javascript that was ported from a bunch of C++ from the original API back in 2004 that is use for the pronto.  I'm just debating whether to port that over or start over using built-in feedback.  The javascript is pretty convoluted but I know it works.  Feedbacks should work but I wanted to see if anyone has played with it before I headed off in a direction.

Nathan

unread,
Jul 17, 2014, 9:11:33 AM7/17/14
to CommandFusion
Mark,

I have also been wanting to get my Honeywell thermostat tied into CF. Can you send me the API, & and any information you have including javascript? I am off today & would love to dive into it. I will gladly share the system as it progresses.

Thanks in advance!

Nathan


On Thu, Jul 17, 2014 at 8:08 AM, Mark Olsen <n2hif...@gmail.com> wrote:

Has anyone worked with the Honeywell EnviraCOM protocol?  I am setting up a system to control a EnviraCOM bus that I currently control with a Philips Pronto.  I have a bunch of javascript that was ported from a bunch of C++ from the original API back in 2004 that is use for the pronto.  I'm just debating whether to port that over or start over using built-in feedback.  The javascript is pretty convoluted but I know it works.  Feedbacks should work but I wanted to see if anyone has played with it before I headed off in a direction.

--
You received this message because you are subscribed to the Google Groups "CommandFusion Software" group.
To unsubscribe from this group and stop receiving emails from it, send an email to commandfusio...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Barry Gordon

unread,
Jul 17, 2014, 9:41:05 AM7/17/14
to comman...@googlegroups.com
Does the Honeywell thermostat allow for direct communications or must you go via a cloud that someone else controls? That is, can I directly control the tstat over IP and get state and temperature feedback directly over IP from the tstat itself?

Sent from my iPad

Nathan

unread,
Jul 17, 2014, 9:57:52 AM7/17/14
to CommandFusion
They are working on a new API that allows for direct control over the new wireless thermostats, but they are not in a hurry to give it out.

Nathan

Mark Olsen

unread,
Jul 17, 2014, 10:59:04 AM7/17/14
to comman...@googlegroups.com
Currently I use a Serial Adapter that ties into their system.  It was like pulling teeth to get the API out of their hands for that and once they did I had to learn a bit about C++.  All they sent me was a bunch of source files.  The API is really robust, supporting multiple zones and busses so there is a lot of stuff I don't need for a single residential system. 
 
The Philips Pronto JS is pretty straightforward and looks mostly like the C++ but I am still trying to wrap my hands around the CF convention of storing functions in a variable so I am a little green in that area.  I would be happy to share both the C++ and the JS for the Pronto.  I'm not intending to pawn off the work but wanted a best guess on direction.  I will try to post them here in a few minutes.

Mark Olsen

unread,
Jul 17, 2014, 11:06:49 AM7/17/14
to comman...@googlegroups.com
Here is the original API from Honeywell.
Original Enviracom API (C++).zip

Barry Gordon

unread,
Jul 17, 2014, 11:06:50 AM7/17/14
to comman...@googlegroups.com
I am not sure what you mean by storing functions in a variable. When I write my JS material for CF I have most modules defined as a single object with internal variables and functions defined as items of the single named object. In that way I must precede references to things in the JS module with the variable name of that object. I normally use a two or three letter uppercase name for the name of this "main" object. This allows me to reuse names of common things and names of functions e.g. Initialize, without having to keep track of them. I normally have one module which has no master object. It contains common subroutines, global variables, and the userMain function.

Sent from my iPad

On Jul 17, 2014, at 10:59 AM, Mark Olsen <n2hif...@gmail.com> wrote:

Currently I use a Serial Adapter that ties into their system.  It was like pulling teeth to get the API out of their hands for that and once they did I had to learn a bit about C++.  All they sent me was a bunch of source files.  The API is really robust, supporting multiple zones and busses so there is a lot of stuff I don't need for a single residential system. 
 
The Philips Pronto JS is pretty straightforward and looks mostly like the C++ but I am still trying to wrap my hands around the CF convention of storing functions in a variable so I am a little green in that area.  I would be happy to share both the C++ and the JS for the Pronto.  I'm not intending to pawn off the work but wanted a best guess on direction.  I will try to post them here in a few minutes.

--

Mark Olsen

unread,
Jul 17, 2014, 11:15:35 AM7/17/14
to
Here are the JS files I use in Philips Pronto plus a log file of responses from the bus.  EnvCommon if I remember right is JS versions of C++ built in functions. EnvLocal was a quick query of common info.  Enviracom is the rest. 
For those other than Barry who may not have used the pronto, GetG and SetG are functions I wrote to handle the way the Pronto stores and retrieves global variables.  CF.widget is how they handle buttons and text boxes.


On Thursday, July 17, 2014 10:06:49 AM UTC-5, Mark Olsen wrote:
Enviracom Pronto.zip

Mark Olsen

unread,
Jul 17, 2014, 11:24:53 AM7/17/14
to comman...@googlegroups.com
That is what I meant.  See what I mean about being green.  Yes it is an object I was referring to.  I like the way it works but when converting some of the older Pronto stuff there are some things that do not take well to that.  I seemed to have a problem with this:
var MESSAGE_SIZE=45;
var RxBuffer=new Array(MESSAGE_SIZE);

to:

MESSAGE_SIZE:45,
RxBuffer:new Array(MESSAGE_SIZE),


for example when I put it in an object.  My knowledge of JS is what I read in the Defintive Guide and what I learned from you Barry.

I have actually been trying to use this method even in Pronto.  I spent yesterday afternoon trying to get one of your old JS creations (ProntoPROIR.doc) to work using it as a object but ended up just using it as is.  I'm trying to use it control Global Cache from my Pronto so I can implement Command Fusion throughtout minus the Theater room.


On Thursday, July 17, 2014 10:06:50 AM UTC-5, Barry Gordon wrote:

Clayton Vicente

unread,
Jul 17, 2014, 11:32:39 AM7/17/14
to CommandFusion Group
In javascript you don´t need to define a size for your Array.
var RxBuffer = [];
If you want a JSON with a array inside you can do this
Var myObject = {
      RxBuffer:[],
   }
You can access the RxBuffer  using myObject.RxBuffer or myObject["RxBuffer"]
Regards
Clayton

Date: Thu, 17 Jul 2014 08:24:53 -0700
From: n2hif...@gmail.com
To: comman...@googlegroups.com
Subject: Re: Honeywell EnviraCOM

Barry Gordon

unread,
Jul 17, 2014, 12:06:56 PM7/17/14
to comman...@googlegroups.com

Mark,

 

Look at a couple of the CF examples on my web site (the-gordons.net). The Autelis pool control example might be a good place to start.

 

If you define each JS module as an object as I do, each module starts off with the definition of a variable which is an object as follows in outline form:

 

var Demo={

                                // in the object you define all the name:value items you want and need e.g.:

                                message size: 25,

                                rxBuffer:new Array(Demo.messageSize),

                                // or as clayton suggests just:

                                rxBuffer:[],

                                // you can add anything you want but remember you are in an object so syntax changes. A function looks like

                                initialize:function() { // body of function },

                                // that is all object items are in the format "name:value," and when referenced must be as part of an object such as "Demo.rxBuffer"

                      };

You can actually have multiple objects all at the same level in a module, objects within objects, etc. etc.

Barry Gordon

unread,
Jul 17, 2014, 12:16:40 PM7/17/14
to comman...@googlegroups.com

Thanks Mark. From what I can see the Enviracom buss is a wired system similar in concept to the Jandy Pool buss (The jandy Pool buss is actually an RS-422 buss). The adapter acts in a manner similar to the The autelis device for the Jandy Pool buss, but only has an RS232 interface as opposed to a TCP/UDP/HTTP/IP interface . I am actually looking for something totally wireless but NOT cloud connected. Honeywell has implied they will be doing that but . . .

 

From: comman...@googlegroups.com [mailto:comman...@googlegroups.com] On Behalf Of Mark Olsen
Sent: Thursday, July 17, 2014 11:07 AM
To: comman...@googlegroups.com
Subject: Re: Honeywell EnviraCOM

 

Here is the original API from Honeywell.

--

Mark Olsen

unread,
Jul 18, 2014, 8:54:52 AM7/18/14
to comman...@googlegroups.com
I have this love/hate feeling toward this site. On the one hand I usually get the info I need pretty quickly.  On the other, it is generally something pretty simple and I feel silly. Had I known I was working with JSON in an OBJECT, a simple Google search would have sufficed.  However searching for 'define variables in javascript' or 'define variable within variable' are of little use.

Barry, the EnviraCOM bus seemed to be the best way to get where I was going 9 years ago, but it is really slow (even in 2005).  It often takes 20 seconds to get the info back I need. I too noticed Honeywell has a new IP based system but I'm pretty sure it is closed.

That is one problem with the proliferation of tablet based control systems.  Now that Apple and Google have taken notice and are getting into the game these API's will be profitable and no longer available to the DIYers. I loathe the idea of using different apps for different devices as it is akin to a table full of remotes.  I know it is fairly easy to pop back and forth in and out of an app on an Apple tablet but so far I haven't found a way to do it in android (seemless, not using the app manager).  That besides the fact that I want a uniform UI to the point of spending hours perusing code. But alas, I am the minority and I digress.

Anyway back on topic.  I am leaning toward keeping the JS method and porting the code because of the scheduling part of the system.  There are 56 temperature settings I need to keep track of for scheduling alone.  I can automate that in JS but would probably need to define each one in a feedback processor.  If anyone disagrees please share.  I keep looking for the opportunity to really dig into feedback processing and this may be it, but maybe I'm a little afraid of it.

Barry Gordon

unread,
Jul 18, 2014, 9:20:50 AM7/18/14
to comman...@googlegroups.com
So essentially they did for their systems what Jandy did for pools with their serial adapter. I wish they would have gone to IP and not RS232. That is what Autelis did to replace the Jandy serial adapter. My iPads have a pool control screen that talks directly to the Autelis device over IP for commands, and receive asynchronous UDP broadcast messages for status feedback.

I want the same sort of system for HVAC control. Unable to find what I want (A Wi-Fi communicating thermostat, I will not use a cloud solution) I am in the process of rolling my own. I have installed a temperature sensor in every room of my home (used the Maxxim/Dallas one wire system). The sensors connect to a small controller that reads them every 3 seconds and stores the values. The controller handles all of the one-wire logic. I interrogate the controller over IP every n (currently 20) seconds and broadcast the values over UDP using JSON format. The iPads show these values for every room. 

I use the UDP/JSON paradigm a lot in my home when control systems (the ones I write) send status to the iPads. All messages have a sequence number and are sent three times with the same sequence number as UDP does not guarantee delivery. Low overhead and trivial to handle on the iPad under CF. All iPads run the exact same CF project.

I am writing a program for a PC (eventually to be run on an RPi) that reads the temperatures and will control the HVAC systems and any zone dampers using a relay board that has 16 SPDT relays for control.  At each HVAC system, there are two, there is a switch (4PDT) that puts that system under control of the existing thermostat (insteon based with a UDI controller) or the under development PC based control. The final PC program will be controlled through the house iPads.

I have had a slight setback in that I ripped my Achilles' tendon so crawling around the attic to run the cables between the PC and the HVAC system is on hold until I can attic crawl again. Hopefully this weekend! 



Sent from my iPad

On Jul 17, 2014, at 10:59 AM, Mark Olsen <n2hif...@gmail.com> wrote:

Currently I use a Serial Adapter that ties into their system.  It was like pulling teeth to get the API out of their hands for that and once they did I had to learn a bit about C++.  All they sent me was a bunch of source files.  The API is really robust, supporting multiple zones and busses so there is a lot of stuff I don't need for a single residential system. 
 
The Philips Pronto JS is pretty straightforward and looks mostly like the C++ but I am still trying to wrap my hands around the CF convention of storing functions in a variable so I am a little green in that area.  I would be happy to share both the C++ and the JS for the Pronto.  I'm not intending to pawn off the work but wanted a best guess on direction.  I will try to post them here in a few minutes.

--

Barry Gordon

unread,
Jul 18, 2014, 9:34:49 AM7/18/14
to comman...@googlegroups.com
JSON (Javascript Object Notation) is nothing more than a pure text version of a JS object that can be easily transmitted using many different enveloping protocols. The reference site is JSON.org. Because JS has simple commands to convert an JS object to and from JSON, the parsing of received JSON becomes almost trivial.

Sent from my iPad

Mark Olsen

unread,
Aug 4, 2014, 11:21:30 AM8/4/14
to
So I've almost got this thing down but have what I think is my last coding question.  Now that I have everything in an object I have an array/object that is giving me some issues.  Before it looked like:

var MsgTable=new Array(15);
MsgTable[0]={
  MessageClassID: 0x3EE0,
  Instance: 0x00,
  RxService: "R",
  MinDataLength: 1,
  QueueFlagMask: 0x00,
  ReceivedFlagMask: MSK_ZONEMGR,
  Periodic: 1,
  SendFunction: null,
  ReceiveFunction: RcvZoneMgr,
  UnknownFunction: UnknownZoneMgr};

MsgTable[1]={....etc....

How do I format that to get it inside of my main object?


Mark Olsen

unread,
Aug 4, 2014, 3:04:17 PM8/4/14
to comman...@googlegroups.com
So at first I thought I had it with:
MsgTable:{
  0:{

   MessageClassID:0x3EE0,
   Instance:0x00,
   RxService:"R",
   MinDataLength:1,
   QueueFlagMask:0x00,
   ReceivedFlagMask:0x0040,//MSK_ZONEMGR
   Periodic:1,
   SendFunction:null,
   ReceiveFunction:Envrcm.RcvZoneMgr,
   UnknownFunction:Envrcm.UnknownZoneMgr
  },
but it didn't like the functions so I ended up just creating a separate object called MsgTable and not trying to nest it.  Appears to work so far.



Mark Olsen

unread,
Aug 15, 2014, 10:09:47 AM8/15/14
to comman...@googlegroups.com
Got it working.  I can receive all the data from the Honeywell Envirocom bus and send what I have tried so far.  I haven't tested sending everything so there may be a bug or two on that end but anyone who wants the code is welcome to it.
Just let me know.  I have to set it aside for awhile while I work on something else.

Charlie

unread,
Apr 14, 2015, 12:57:21 PM4/14/15
to comman...@googlegroups.com
Hello Barry,
Did you have any success with the Envriacom bus?   I am looking for a serial interface to hook up to the Enviracom buss I can build as I may need several.  Can you give me any guidance in this matter-  Thanks, Charlie

Barry Gordon

unread,
Apr 14, 2015, 4:14:58 PM4/14/15
to comman...@googlegroups.com

I have not done any work on that. I have decided to build my own HVAC system controller based on 1) a Raspberry Pi 2B, 2) An Embedded Systems Onewire controller to handle temperature readings from Onewire temperature sensors, and 3) a Denkovi 16 relay (SPDT) board.  All communications will be IP based and will be coded in either Javascript or Python on the Rpi. The Rpi  will broadcast all state changes as UDP messages, and accept TCP messages from the iPads which are the UI to my home.

 

In this manner I can control based upon temperature in each room.  The relay board has enough relays to handle any dampers I might want. I have never had a Humidity issue in the house so I do not use humidity sensors. The HVAC systems take 5 signals for total control and since there are two of them that takes 10 of the 16 relays (Cooling 1 &2, Heating 1&2, Fan).

Reply all
Reply to author
Forward
0 new messages