Guide: Slave Vera House Modes to HE using Maker API and SiteSensor/Reactor

G'day All, as a recent HE convert, the only items I cant migrate from my Vera is my Nest and Honeywell Wifi thermostats.

As a result, all my HVAC automation logic is going to stay on Vera but my Hubitat is going to manage House modes and presence detection.

GUIDE:
On HE use the same House modes that Vera uses: Home, Away, Night & Vacation and Install the Maker API.

On Vera you'll need the HouseModes, SiteSensor and Reactor apps installed. Create a new SiteSensor and configure it as follows:

Name: Hubitat Modes Sensor
Request URL: http://[your hub ip]/apps/api/[maker api id]/modes?access_token=[your token]
Request Interval: 60 seconds
Response Type: JSON
Trigger Type: URL unreachable
Trip Expression: blank

Value Expressions:

These may vary depending on the order your House Modes on HE were created in - to check use the "Request URL" and your web browser to check the ID's. Firefox shows me this:
Screen Shot 2020-08-31 at 9.09.27 am

So in SiteSensor I've mapped them like this - the first line just tells SiteSensor that it is reading a Table:

You just need to know which ID # matches which House mode for the Reactor Automation. The Description field is just there so you know which fields are which.

On Vera, create a new Reactor Sensor. You can call it whatever you like, I called mine "Home / Away Sensor".

Configure the "Conditions" like this paying attention to the OR/AND structure and the group labels - the fields you are checking on the SiteSensor are Values 2 thru 5:

and configure each Home Mode = True Activity as follows (I change the Nest Home/Away at the same time):

I added some extra step to "Vacation" mode - I turn our nests off completely as here in Melbourne, Australia we dont have to worry about the house pipes freezing etc.

You'll notice in the Conditions section the last item just ensures that the SiteSensor stays armed - if it finds the site sensor has been off for 60 seconds (eg due to a luup reload or something else) it turns it back on:

That's it, you are done and your Vera is now slaved to your HE House modes. :sunglasses:

2 Likes

So just taking this one step further - I wanted to be able to see the Thermostat status in HE (I dont need to change anything, that is all automated on Vera).

Screen Shot 2020-09-09 at 10.29.04 am

So what I did to achieve the above was as follows (this is all on HE):

  • Create my Virtual Thermostats in Devices.
  • Create the required Global Variables in Rule Machine as Strings and Connect them up - it isn't worth bothering to import set-points etc imo
  • Make sure you give the GV's names that make sense to you as you'll need them later

Create a new Rule Machine Rule to Import the States from Vera - mine looks like this:

The info you need from Vera is quite simple - in my example below I'm using my Honeywell D6 Pro:

  1. Local Hub IP Address
  2. Device Number of your Thermostat

%D6 Pro - Fan Mode%

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=[Vera_Dev_Num]&serviceId=urn:upnp-org:serviceId:HVAC_FanOperatingMode1&Variable=FanStatus

%D6 Pro - Mode%

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=[Vera_Dev_Num]&serviceId=urn:upnp-org:serviceId:HVAC_UserOperatingMode1&Variable=ModeStatus

%D6 Pro - Operating State%

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=[Vera_Dev_Num]&serviceId=urn:micasaverde-com:serviceId:HVAC_OperatingState1&Variable=ModeState

%D6 Pro - Temperature%

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=[Vera_Dev_Num]&serviceId=urn:upnp-org:serviceId:TemperatureSensor1&Variable=CurrentTemperature

Then you can just replace [Hub_IP] and [Vera_Dev_Num] in the above HTTP GET strings

So in your new Rule Machine Rule, set the trigger using the "Periodic" option to grab the data at whatever frequency suits you:

Then in "Select Actions to Run", create a "Set Variable" Action for each Thermostat State you are capturing:

Now that you have built your importer - I highly recommend turning on logging to verify that your importer rule is working (it's very easy to break these and not realize it).

If any Import Actions are failing, I recommend deleting that action and re-creating it. For whatever reason, I've found editing these wont fix the problem.

Create a new Rule Machine Rule to use the Global Variables to update your Virtual Thermostats - mine looks like this:

UPDATED: So in your new Rule Machine Rule, set the trigger using the "Other trigger" and when your importer "rule fires" to grab the data:

I've also added a 10 second delay to allow the importer to finish:

The info you need here is quite simple:

  1. The names of the Global Variables you created
  2. the Virtual Thermostat you are changing attributes on

The Global variable names all need to be wrapped with the % symbol to tell RM that they are Variables. eg

%D6 Pro - Fan Mode%
%D6 Pro - Mode%
%D6 Pro - Operating State%
%D6 Pro - Temperature%

To create the actions, you'll need to use the "Run Custom Action" type, specify your Virtual Thermostat, the command you are running, the parameter, and the string value.

RM is very fussy with formating the String Value, you can easily stuff this up and you'll need to delete the action and start again as editing can't fix parameters once they've been set.

Once you are done, set up your triggers to watch for the data changing and you are done. Again, I highly recommend turning on full logging so you can see any issues and correct them.

Btw, this method will allow you to present State information from any device in Vera, or for that matter, any Wifi/Networked device that will respond to HTTP Get commands.

One thing I didn't cover above, was how to get the required info from Vera to send HTTP Get requests.

In Vera, go into the Device you want to get info from, then select "Advanced" from the bottom of the screen. On the "Params" tab, your "Device ID" number is at the top in Green. And the JSON files being used are in the device_json field.

To get the JSON file, go to the "Apps" menu and then "Develop Apps". Search for the JSON file you need and download it.

Now go back to the device you want to grab status data from, then select "Advanced" from the bottom of the screen. Switch to the "Variables" tab and you'll see all the device statuses you can query via a HTTP Get command. Hover your mouse over the variable name you want and a mouse-over description will appear with the "ServiceID" you need to query to get that Variable.

You can then save yourself some work by finding it in the JSON file along with all the supported attributes for that variable.

Then you can put together your HTTP get Query:

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=[Vera_Dev_Num]&serviceId=[Device_service_ID]&Variable=[Variable_to_Get]

and voila, you'll have something like this:

http://[Hub_IP]:3480/data_request?id=variableget&DeviceNum=354&serviceId=urn:upnp-org:serviceId:HVAC_UserOperatingMode1&Variable=ModeStatus

Great work! also cred to Rigpapa /Mattias

1 Like

Cheers, I am merely standing on the shoulders of Giants! None of this would be possible without @bcopeland Rule Machine either.

This section has been updated as I found a better way to do it than watching for the fields to change.