Page 1 of 2 12 LastLast
Results 1 to 10 of 11

Thread: Finally got it installed (Evohome) but what a mission!

  1. #1
    Automated Home Sr Member
    Join Date
    Sep 2015
    Posts
    59

    Default Finally got it installed (Evohome) but what a mission!

    Ok so a few days ago, I had the Evohome installed, along with the Hot Water Kit, on my heating at home, which consists of:

    S-type setup
    Ideal Logic 18 Heat Only Boiler
    Megaflow Storage Cylinder
    14 Radiators across 12 Zones (more about this later)

    The EvoHome setup:
    Connected Thermostat Pack - ATP921R3100
    Hot Water Kit - ATF500DHW
    Wall Mount Kit - ATF600

    So all of this has been wired up correctly, as per the installation instructions for an S-type system, but to retain the safety isolation on the Megaflow, the wiring was slightly modified:



    The pump is also powered directly via the Boiler.

    So, day one, installer finishes and it's installed... After about an hour we get this:



    So try resetting the controller, the fault clears only to re-appear later. Bummer... SO call Honeywell for some advice, and after going through everything, we get to the conclusion that the initial setup was performed wrong, as the option to use a Boiler Relay/Heat Demand wasn't needed on the S-type setup, so... we do the following:

    1) Perform full Factory Reset
    2) Choose 'Guided Setup'
    3) Select 'No' to require a Boiler Relay/Heat Demand Relay
    4) Select 'Yes' to Hot Water Kit
    i) Bind CS92
    ii) Bind DHW BDR91
    iii) Bind CH BDR91
    5) Create Zones
    6) Have some cake

    Success! No more errors on the controller, both DHW and CH are working just fine (so demanding heating and hot water is triggering the relevant BDR91's, which in turn is opening the motorised valves. Happy!!

    However...

    It now looks as though when the DHW demand is triggered, the motorised valve on that loop does open, but there is now no demand signal going to the boiler. From what I can see, it's all connected correctly as per wiring (the feed from Orange is going to Boiler Live and Pump Live), but neither the pump or boiler trigger. So my guess is the microswitch in the relay is caput... But annoyingly, this actuator was replaced last year as the old one had seized (it was previously a Honeywell V4043H 272848), and was replaced with a Danfoss ZA5. So, not sure whether to just replace the head with another ZA5, or fit what was previously there? Hopefully this should then sort it out...

    I also need to fit a TRV to the radiator in the Hall, as this has no valve fitted, as it was where the original stat was. At present, when any zone demands any heat, the hall rad also warms up, and it's just baking the house with heat, so pretty much (for now) makes the advantages of the system somewhat limited.

    Also been playing with the API (as mentioned in the other forum topic) and getting all my temps from the zones into my Graphite server. So another bonus!



    All in, early days yet, still a lot to do with the system & also the API as a whole, but so far so good!
    Last edited by PaulB; 5th November 2015 at 12:27 PM.

  2. #2
    Automated Home Legend paulockenden's Avatar
    Join Date
    Apr 2015
    Location
    South Coast
    Posts
    1,621

    Default

    Can you explain a bit more about your Graphite setup please Paul. I've had a bit of a play with other graphing tools (Plot.ly, etc.) but not Graphite, which I think it run locally rather than an online service, isn't it?

    How have you glued it all together?

    Thanks,

    Another Paul.

  3. #3
    Automated Home Sr Member
    Join Date
    Sep 2015
    Posts
    59

    Default

    I run Graphite on my VPS, but it can be run locally, even on an RPI. My VPS is running Ubuntu 12.04, so some older libraries did need updating, but it's build directly from source from the following instructions:

    http://graphite.readthedocs.org/en/l...ll-source.html

    There are plenty of guides available on setting it up with other Linux distro's which is pretty good.

    Also, I use Grafana for the frontend (which is seen above). I just find it much easier for creating dashboards, and getting layouts which work. Again, installation instructions vary but plenty of resources online.

    As for the metrics, I have knocked together a couple of scripts. There is 1 shell script, called by Cron every minute (as I use it to monitor various other things, not just Evohome), and then a Python script which is called from the shell script, and this polls the API every 5 minutes, which the calling shell script then pushes to carbon. It works pretty well!

    I do have all the code in git (although living under a private repo for now), however, below are the 2 (cutdown) scripts used...

    File Structure (IMPORTANT)

    ./graphiteMetrics.sh
    ./emhosts/SYSHOSTNAME/PARENTMETRIC/EvoHome.py

    SYSHOSTNAME This is the HOSTNAME of the System used to poll the API (Get this running command hostname -s)
    PARENTMETRIC Parent Key for putting the data into Graphite

    graphiteMetrics.sh
    Code:
    #!/bin/bash
    
    # Setup a sane path
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/Apps/opt/bin
    export PATH
    
    sourceFolder=$(dirname "$0")
    
    # Define Graphit Host & Port
    HOST=graphite.host.here
    PORT=2003
    
    # Define 'graphiteBatchSize'
    graphiteBatchSize=25
    graphiteBatchIDX=0
    graphiteBatchSizeCounter=0
    
    # What time is it?
    time=$(date +%s)
    
    buildGraphiteBatches()
    {
      # Build all items into batches for sending via NC
      tPre=""
      if [ ! ${graphiteBatchSizeCounter} -eq 0 ]; then
        tPre="\n"
      fi
      if [ ! -z "$VERBOSE"  ]; then
        echo "Batch Element [${graphiteBatchIDX}][${graphiteBatchSizeCounter}] = '${1}'"
      fi
      graphiteMetricArray[${graphiteBatchIDX}]="${graphiteMetricArray[${graphiteBatchIDX}]}${tPre}${1}"
      graphiteBatchSizeCounter=$[$graphiteBatchSizeCounter +1]
      if [ ${graphiteBatchSizeCounter} -ge ${graphiteBatchSize} ]; then
        graphiteBatchIDX=$[$graphiteBatchIDX +1]
        graphiteBatchSizeCounter=0
      fi
    }
    
    # Define Function to send data to Graphite Host
    send()
    {
      if [ ! -z "$VERBOSE"  ]; then
        echo "Trying to send Batch:"
        echo -e "${1}"
      fi
    
      retryCount=0
      retCode=10
    
      #
      # If we have nc then send the data, otherwise alert the user.
      #
      while [ ! ${retCode} -eq 0 -a ${retryCount} -lt 10 ]; do
        ((retryCount++))
        if ( which nc >/dev/null 2>/dev/null ); then
          tNCCMD=$(echo -e "${1}" | nc -q1 -w1 ${HOST} ${PORT})
          #tNCCMD=$(nc -q1 -w1 -c "printf '${1}'" ${HOST} ${PORT})
          retCode=$?
        elif ( which netcat >/dev/null 2>/dev/null ); then
          tNCCMD=$(echo -e "${1}" | netcat -c -w1 ${HOST} ${PORT})
          #tNCCMD=$(netcat -c -w1 -c "printf '${1}'" ${HOST} ${PORT})
          retCode=$?
        else
          if [ ! -z "$VERBOSE"  ]; then
            echo "nc or netcat not present.  Aborting"
          fi
        fi
      done
      if [ ! -z "$VERBOSE"  ]; then
        if [ ${retryCount} -eq 10 ]; then
          echo "*ERROR* Problem Sending Stats to Graphite - $(date)"
        else
          echo "*INFO* Batch Sent to Graphite - $(date)"
        fi
      fi
    }
    
    
    # Let's get metrics...
    
    # Get Hostname
    host=$(hostname -s)
    
    # Loop through values which appear to be Per-Host Pollers.
    for i in ${sourceFolder}/emhosts/${host}/* ; do
      if [ -d ${i} ]; then
        tDirHost=$(basename ${i})
        for ii in ${i}/* ; do
          if [ -x ${ii} ]; then
            # run the script, capturing the output
            tAppResult=$(${ii})
            while read line; do
              if [ ! "${line}" = "" ]; then
                metric=$(echo $line | awk '{print $1}')
                value=$(echo $line | awk '{print $2}')
                ntime=$(echo $line | awk '{print $3}')
                buildGraphiteBatches "${tDirHost}.${metric} ${value} ${ntime}"
              fi
            done <<EOF
    $tAppResult
    EOF
          fi
        done
      fi
    done
    
    # Loop through Batches & Send...
    for tBatch in "${graphiteMetricArray[@]}"; do
      send "${tBatch}"
    done
    EvoHome.py
    Code:
    #!/usr/bin/env python
    
    # Pull Details from EvoHome API
    
    USERNAME = 'email@some.host'
    PASSWORD = 'YoUrPaSsWoRd'
    
    import requests
    import json
    import time
    from time import gmtime, strftime
    
    ts_salt = strftime("%M", gmtime())
    timestamp = int(time.time())
    
    def is_number(s):
      try:
        n=str(float(s))
        if n == "nan" or n=="inf" or n=="-inf" : return False
      except ValueError:
        try:
          complex(s) # for complex
        except ValueError:
          return False
      except:
        return False
      return True
    
    def main():
      url = 'https://rs.alarmnet.com/TotalConnectComfort/WebAPI/api/Session'
      postdata = {'Username':USERNAME,'Password':PASSWORD,'ApplicationId':'91db1612-73fd-4500-91b2-e63b069b185c'}
      headers = {'content-type':'application/json'}
    
      response = requests.post(url,data=json.dumps(postdata),headers=headers)
    
      userData = json.loads(response.content)
    
      userId = userData['userInfo']['userID']
      sessionId = userData['sessionId']
    
      url = 'https://rs.alarmnet.com/TotalConnectComfort/WebAPI/api/locations?userId=%s&allData=True' % userId
    
      headers['sessionId'] = sessionId
    
      response = requests.get(url,data=json.dumps(postdata),headers=headers)
    
      fullData = json.loads(response.content)[0]
    
      for device in fullData['devices']:
        if device['thermostatModelType'] == "DOMESTIC_HOT_WATER":
          if device['thermostat']['indoorTemperature'] != 128.0:
            print "heating.hotwater.temperature %s %s" % (device['thermostat']['indoorTemperature'], timestamp)
            if device['thermostat']['changeableValues']['mode'] == "DHWOn":
              print "heating.hotwater.isheating 1 %s" % (timestamp)
            else:
              print "heating.hotwater.isheating 0 %s" % (timestamp)
    
        if device['thermostatModelType'] == "EMEA_ZONE":
          if device['thermostat']['indoorTemperature'] != 128.0:
            print "heating.central.%s.setpoint %s %s" % (device['name'].replace(' ', ''), device['thermostat']['changeableValues']['heatSetpoint']['value'], timestamp)
            print "heating.central.%s.temperature %s %s" % (device['name'].replace(' ', ''), device['thermostat']['indoorTemperature'], timestamp)
            if device['thermostat']['changeableValues']['mode'] == "Heat":
              print "heating.central.%s.isheating 1 %s" % (device['name'].replace(' ', ''), timestamp)
            else:
              print "heating.central.%s.isheating 0 %s" % (device['name'].replace(' ', ''), timestamp)
    
    if __name__ == '__main__':
      if ts_salt.endswith("0") or ts_salt.endswith("5"):
        main()
    Graphite will then have metrics under the following locations from this, assuming the following:

    PARENTMETRIC = MyHouse

    MyHouse.heating.central.ZONENAME.isheating Whether the zone is Heating of Off (read below)
    MyHouse.heating.central.ZONENAME.setpoint Current Temperature Setpoint for the Zone
    MyHouse.heating.central.ZONENAME.temperature Current Detected Temperature for the Zone
    MyHouse.heating.hotwater.isheating Whether the Heating is scheduled ON or OF for the Hot Water
    MyHouse.heating.hotwater.temperature Current Temperature of the Hot Water

    Note regarding ZONE.isheating
    I'm not sure if the API correctly returns this? Or if I'm interpreting it correctly... Under the HR92's, there is a Mode which I assume (from the data retrieved from the API) is either None or Heat, depending on whether the zone is demanding heat. However, it ALWAYS returns 'None'. Could do with some clarification from Honeywell on this...

    Also, calling the Netcat command, the arguments you pass seem to vary depending on version, build, or distro. The above ones are suited to me as I mainly use Ubu/Debian, however, something like Centos will need the options changing.

    Hopefully this will be useful for you.
    Last edited by PaulB; 5th November 2015 at 02:00 PM.

  4. #4
    Automated Home Legend paulockenden's Avatar
    Join Date
    Apr 2015
    Location
    South Coast
    Posts
    1,621

    Default

    Thanks - will digest later.

    P.

  5. #5
    Automated Home Lurker
    Join Date
    Jun 2018
    Posts
    2

    Default Grafana Templates Please

    Quote Originally Posted by PaulB View Post
    Ok so a few days ago, I had the Evohome installed, along with the Hot Water Kit, on my heating at home, which consists of:

    S-type setup
    Ideal Logic 18 Heat Only Boiler
    Megaflow Storage Cylinder
    14 Radiators across 12 Zones (more about this later)

    The EvoHome setup:
    Connected Thermostat Pack - ATP921R3100
    Hot Water Kit - ATF500DHW
    Wall Mount Kit - ATF600

    So all of this has been wired up correctly, as per the installation instructions for an S-type system, but to retain the safety isolation on the Megaflow, the wiring was slightly modified:



    The pump is also powered directly via the Boiler.

    So, day one, installer finishes and it's installed... After about an hour we get this:



    So try resetting the controller, the fault clears only to re-appear later. Bummer... SO call Honeywell for some advice, and after going through everything, we get to the conclusion that the initial setup was performed wrong, as the option to use a Boiler Relay/Heat Demand wasn't needed on the S-type setup, so... we do the following:

    1) Perform full Factory Reset
    2) Choose 'Guided Setup'
    3) Select 'No' to require a Boiler Relay/Heat Demand Relay
    4) Select 'Yes' to Hot Water Kit
    i) Bind CS92
    ii) Bind DHW BDR91
    iii) Bind CH BDR91
    5) Create Zones
    6) Have some cake

    Success! No more errors on the controller, both DHW and CH are working just fine (so demanding heating and hot water is triggering the relevant BDR91's, which in turn is opening the motorised valves. Happy!!

    However...

    It now looks as though when the DHW demand is triggered, the motorised valve on that loop does open, but there is now no demand signal going to the boiler. From what I can see, it's all connected correctly as per wiring (the feed from Orange is going to Boiler Live and Pump Live), but neither the pump or boiler trigger. So my guess is the microswitch in the relay is caput... But annoyingly, this actuator was replaced last year as the old one had seized (it was previously a Honeywell V4043H 272848), and was replaced with a Danfoss ZA5. So, not sure whether to just replace the head with another ZA5, or fit what was previously there? Hopefully this should then sort it out...

    I also need to fit a TRV to the radiator in the Hall, as this has no valve fitted, as it was where the original stat was. At present, when any zone demands any heat, the hall rad also warms up, and it's just baking the house with heat, so pretty much (for now) makes the advantages of the system somewhat limited.

    Also been playing with the API (as mentioned in the other forum topic) and getting all my temps from the zones into my Graphite server. So another bonus!



    All in, early days yet, still a lot to do with the system & also the API as a whole, but so far so good!
    Managed to get execute the script and got the stats in graphite DB. Could you please share the Grafana Templates Please.

  6. #6
    Automated Home Sr Member
    Join Date
    Sep 2015
    Posts
    59

    Default

    Quote Originally Posted by Selvan View Post
    Managed to get execute the script and got the stats in graphite DB. Could you please share the Grafana Templates Please.
    Hi

    The dashboard has since changed, as I've moved all my time series data to InfluxDB. I've not got a copy of the original Graphite dashboard any more sorry.

  7. #7
    Automated Home Lurker
    Join Date
    Jun 2018
    Posts
    2

    Default

    Quote Originally Posted by PaulB View Post
    Hi

    The dashboard has since changed, as I've moved all my time series data to InfluxDB. I've not got a copy of the original Graphite dashboard any more sorry.
    Thanks for the reply Paul. I need dashboard for EvoHome. Grafana and InfluxDB also fine for me. It would be helpful if could you please share your source code

  8. #8
    Automated Home Ninja
    Join Date
    Aug 2016
    Posts
    489

    Default

    Don’t put a TRV on that last radiator unless you have some other form of bypass in the system.

  9. #9
    Automated Home Sr Member
    Join Date
    Oct 2017
    Posts
    60

    Default

    Quote Originally Posted by dty View Post
    Don’t put a TRV on that last radiator unless you have some other form of bypass in the system.
    I have often wonder why this would be a problem with a full Evohome system. Surely the pump won't start unless one of the rads is calling for heat, so it will never be pumping against a closed system?

    We have HR92s on *all* our rads and no bypass that I am aware of.

  10. #10
    Automated Home Legend
    Join Date
    Sep 2014
    Location
    Scotland
    Posts
    1,886

    Default

    Quote Originally Posted by filbert View Post
    I have often wonder why this would be a problem with a full Evohome system. Surely the pump won't start unless one of the rads is calling for heat, so it will never be pumping against a closed system?

    We have HR92s on *all* our rads and no bypass that I am aware of.
    Some boilers have a small bypass fitted internally.

    If there is absolutely zero bypass of any kind and you have HR92's on every radiator you will have problems. There are situations where the pump can be triggered when all the HR92's are closed or have recently closed. For example when you turn the heating off all the HR92's close first and only a few seconds after that will the boiler relay go off, and the boiler will typically have pump overrun as well. During this time there would be nowhere for the pump to pump to, this can even cause joints to leak in extreme cases if it is a constant speed pump due to the very high pressure that can result from the pump pumping into a dead end.

    Most boilers have a minimum flow requirement and this can't be guaranteed unless there is a bypass radiator or bypass valve in the system.
    Last edited by DBMandrake; 21st July 2018 at 07:38 PM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •