Honeywell Evohome Monitoring

Wow!!!

That sounds as if it was a right pain!

Thanks for setting things out so clearly - sounds like HA would be the way to go but I’m not intending to run that. I’ll have to give this some serious thought before deciding whether to try it out.

Simon

I’m not seeing what HA adds over Node-red in the above setup. If @Mike_Henderson wasn’t already using it, I don’t see a reason to start for this. Node-red could use Mqtt-in nodes instead of the blue ones shown above.

@mjr as I said earlier I’m no expert on Node-red.

But am I correct in assuming that I would only get a new value from the mqtt-in block when a new value is available? I’d already tried something like that and showed up some issues with how Graphs are created in EMONCMS with data that has infrequent changes of value over long periods of time, essentially I was getting trends with long initial parts of trends lines missing as the trend lines would only start to be drawn from a data point within the time range which was worse than useless.
I used the Poll block to pass regular values whether unchanged or not over to the EmonPI giving the graphs I want.

Feel free to throw alternative solutions at me :slight_smile:

Mike

@Bramco Driving way off-topic here. But I like HA for the simple home automation it allows me, simple things like turning on electric heating in the winter when there is enough spare solar. I can do this with a £10 Tp-link plug-in smart switch :slight_smile:

And things like its energy tracking feature which is using data it’s reading from the EmonPI.

Which is something I’m going to have to get into with our new build - I’m up to my eyes though with the basics of ordering sanitaryware etc…

Got to decide soon whether to relocate our emoncms system on a Pi with a home brew diverter, or whether to purchase a new emonPi and replace all the old kit.

I’ll take a look at HA again when we move in - found it very confusing a few years ago, so didn’t bother. I understand it’s moved on since then.

Simon

I’m no expert either. I’ve only been using it since Monday! But I think you could create feedback loops to publish regular values whether changed or not. Here’s an example for one input and sending it every 5 seconds, using the inject button and debug msg display:

The “delay 1s” both allows the buffer reset message to arrive before a new input value and makes the feedback loop look more obvious.

I expect something neater can be done for multiple values by someone who knows node-red better.

You might want to check out this thread: Script for feeding Honeywell Evohome data into Emoncms

I’m successfully using the Python script that was provided to get the Evohome data.

I made a few modifications, I think mainly to stop the script exiting when the connection timed out:

#!/usr/bin/python
import requests
import json
import time
import math
from sys import exit

USERNAME = 'username'
PASSWORD = 'password'

while True:
    # Initial JSON POST to the website to return your userdata
    url = 'https://tccna.honeywell.com/WebAPI/api/Session'
    postdata = {'Username': USERNAME, 'Password': PASSWORD, 'ApplicationId': '91db1612-73fd-4500-91b2-e63b069b185c'}
    header = {'content-type': 'application/json'}
    # get sessionID
    data = json.dumps(postdata)
    
    error = 0
    
    try:
        response = requests.post(url, data=data, headers=header)
    except:
        print("Couldn't get data")
        error = 1
        time.sleep(60)
        
    if error == 0:
        str_response = response.content.decode("utf-8")

       # print(str_response)
        
        try:
            userinfo = json.loads(str_response)
        except:
            print("Couldn't decode data")
            error = 1
            time.sleep(60)

        if error == 0:
            if 'userInfo' not in userinfo: 
                #print "not allowed - header"
                # sleep for 5 minutes
                time.sleep(300)
                continue

            # here havea  connection so can get data
            userid = userinfo['userInfo']['userID']
            sessionId = userinfo["sessionId"]

            # setup and receive data then loop and extract temperature for each device
            params = ""
            paramsSet = ""
            url = 'https://tccna.honeywell.com/WebAPI/api/locations?userId=%s&allData=True' % userid
            header['sessionId'] = sessionId
            try:
                response = requests.get(url, data=json.dumps(postdata), headers=header)
            except:
                print("Timed out")
                error = 1
                time.sleep(60)
                
            if error == 0:
                str_response = response.content.decode("utf-8")
               # print(str_response)
                
                try:
                    fullData = json.loads(str_response)[0]
                except: 
                    print("couldn't decode data")
                    error = 1
                    time.sleep(60)

                if error == 0:
                    if 'devices' not in fullData: 
                        print("not allowed - data")
                        time.sleep(300)
                        continue


                    for device in fullData['devices']:
                        stemp = ""
                        if params != "": params += ","
                        # Add device current temperature
                        if device['thermostatModelType'] == "DOMESTIC_HOT_WATER": params += "hot_water_temp:"
                        else:  params += device['name'] + "_temp:"
                        stemp = str(round(device['thermostat']['indoorTemperature'],1))
                        #stemp = str(math.ceil((device['thermostat']['indoorTemperature'])*10)/10)
                        params += stemp

                    for deviceSetTemp in fullData['devices']:
                        if params != "": params += ","
                        params += deviceSetTemp['name'] + "_set_temp:"
                        stemp = str(round(deviceSetTemp['thermostat']['changeableValues']['heatSetpoint']['value'],1))
                        params += stemp


                    #now generate the insert into emoncms
                    url = "http://localhost/emoncms/input/post.json?node=evohome&apikey=PUT_API_KEY_HERE&json={"
                    url += params + "}"
                    print(url)
                    response = requests.get(url, headers=header)

                    # debug - read the response and print it
                    str_response = response.content.decode("utf-8")
                    # print(str_response)

                    del params

                    time.sleep(300)

I really like your system, I’m trying to do a similar thing with evohome thermostatic valves, but do you also use the Honeywell concentrator / display to intercept RF messages? Because I’m doing tests with nanoCul and ramses_rf but it doesn’t see anything from TRV. Thanks anyway.

Hi @VitAngelo

I also use a NanoCUl and Ramses_fr, but then use these along with EvoGateway running on the PI which provides the data on an MQTT Interface.

I’m picking up data from eight HR92 TRVs, a T87 remote thermostat, and the Evohome base station.

This is the data I can see in the Events.log

Mike

Thanks for your collaboration, I have installed evogateway and also put the concentrator, but in any case no messages are received, I also tried to change the setpoints from the TRV and the display updates, but nothing is shown from evogateway :frowning:


I have the latest model of kit evohome, this one:
evo

Can you help me understand what the problem may be?
I’m testing from a VM running Ubuntu 20.04.4
and bviously on the nanocut I have already loaded the evofw3.

Thanks again

Hello @Mike_Henderson ,
I just started with a evohome and your work on this toppic got me started with emoncms. Waiting for nanocul to arrive. From your post I do not quite understand why you could not get what you wanted directly from evogateway to emoncms. Can you detail a bit what was done with node red? Maibe an example of a more complex processing?

Initially, I did go straight from EvoGateway to emoncms. I could only see these options available in the configuration for EvoGateway.

[MQTT]
MQTT_SERVER                 = ###.###.###.### 
MQTT_USER                   = ######## 
MQTT_PW                     = ########
MQTT_PUB_TOPIC              = evohome/evogateway
MQTT_SUB_TOPIC              = evohome/evogateway/_zone_independent/command
MQTT_PUB_AS_JSON            = False
MQTT_GROUP_BY_ZONE          = True

So I entered the IP address and details for my local EmonCMS and promptly ended up with several hundred extra inputs showing up under the inputs tab of EmonCMS. Since a fair amount of them seem to be text strings or NAN of some sort, it was untidy and the vast majority was data I wasn’t interested in seeing within EmonCMS. I couldn’t see a way of limiting what data was made available to EmonCMS and it made my inputs tab in EmonCMS unmanageable.

Then, since I also wanted to try and do some automation in Homeassisant it made sense to me to send the data there first. Home Assistant was make sense of data which is NAN, and I could decide which limited data points I wanted to pass on to EmonCMS.

As for clever automation. Not anything really clever yet as I’m reluctant to place too much reliance on it yet.
Sometimes it appears to miss data packets and I find that the valve positions for a radiator will be incorrect for quite a while till the next update. If a value is missed, it can be quite a while till an actuator reports its position again. It’s an annoyance if it’s only being used to display and trend the value. If I used it in automation it would be more than annoying.

However, one I did, was to look at the average temperature of the house early in the morning to see if it was above a certain value. If it was, then set Evohome to ‘OFF’ Then recheck an hour later, and if it had dropped then set Evohome back to AUTO. Kind of anticipating it was going to be a warm day.
I also do some rescaling of the data within home assistant

I see that the EvoGateway project is moving to what I think is called Evohome.CC, will be a custom component for Home Assistant anyway. That is the route I’m going to be taking and retiring EvoGateway. I’ll be ordering an SSM-D2 which is like the nanoCUL but can plug directly into the USB slot on my HA Server.

Ok,
That makes sense.
I will have to try both solutions.

Dear ,
I order a SSM-D2 at Indalo
I would like to install EVOGATEWAY on a raspberry which have already RFM69 and a ZigBee dongle with zigbee2mqtt
Question :

  • Do you had difficulties to install the Python script and configure it as service ?
  • Do you know a tutorial which I can follow ?
  • I use Home assistant. I suppose no difficulties with the integration through MQTT

Thanks for advises

Hi.

Until this weekend I was running Evogateway on a PI with nanocul. I found it was an overcomplicated setup.

I had been watching Evohome_CC with interest and waiting until what looks like some stable releases.

A few weekends ago I took delivery of an SSM-D2 and to be honest if you want to get data from an Evohome system then this is the way to go.

Following the installation instructions had Evohome_CC up and running in HA in about an hour, then just to tidy up removing Evogateway after that.

Same as before I use Node-red and mqtt to shift data over to emoncms.

And with Evohome_CC it allows me to fake sensors, so I can use an emonTH v2 as a temperature sensor for an Evohome zone.

1 Like

Hi Mike,
Thank for the clarification.

My situation
My HA is a virtual machine running on HyperV on Windows 11 PRO.
There is no solution to mount the USB Dongle (I suppose a SERIAL port) on the VM running Linux.
I know ESXi will be better but as I run also a lot of other VM for my job, I prefer to keep Hyper V.
This is why I prefer the gateway solution (I currently have ESP32 / Rpi for other integrations through MQTT).

Tutorial
As you have experience with Evogateway , it will be interesting to have the Pro/Con of Evogateway vs zxdavb.

For zxdavb, the support discussion is about 3000 posts and I don’t know what to install :

  • ramses_rf : is it the main program to install ?
  • evohome-async : ?
  • ramses_protocol : the Wiki (it will be interesting to have a PDF version of this document).
  • ramses_cc : a Custom component to install in HA ?

About “Evohome_CC”, it is not clear if I have to install something from zxdavb or if the “custom component Evohome_CC” is only installed in HA.

It is difficult for me to choose a solution : Evogateway vs zxdavb

Best Regards.

To use Evohome_CC, only two things had to be installed in HA.

  • HACS. I’d never installed this in the past.
  • Add ramses_cc as an Integration via HACS.

Full instructions which were quite easy to follow are at [1. Installation · zxdavb/ramses_cc Wiki · GitHub]

And what about this for your USB issue? 3. How to: USB dongle distant from HA · zxdavb/ramses_cc Wiki · GitHub

1 Like

Have you looked at this for Evogateway. This is what I ran on a separate PI with nanocul and then used mqtt to HA.

https://github.com/smar000/evoGateway

1 Like

I had trouble with the installation of the prerequisites which were listed in the requirements.txt. But I’ll put that down to my less than complete knowledge of Linux.

I had it configured as a service. I could never get it to start automatically on boot. So if I did reboot the PI I always had to restart the service using systemctl start evogateway. I didn’t mind doing this as after a reboot I liked to log in and check the events.log file anyway to ensure it was collecting packets.

1 Like

To automatically startup a service at boot you type:

sudo systemctl enable evogateway