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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • PaulB
    Automated Home Sr Member
    • Sep 2015
    • 60

    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; 5 November 2015, 12:27 PM.
  • paulockenden
    Automated Home Legend
    • Apr 2015
    • 1719

    #2
    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.

    Comment

    • PaulB
      Automated Home Sr Member
      • Sep 2015
      • 60

      #3
      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:



      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; 5 November 2015, 02:00 PM.

      Comment

      • paulockenden
        Automated Home Legend
        • Apr 2015
        • 1719

        #4
        Thanks - will digest later.

        P.

        Comment

        • Selvan
          Automated Home Lurker
          • Jun 2018
          • 2

          #5
          Grafana Templates Please

          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.

          Comment

          • PaulB
            Automated Home Sr Member
            • Sep 2015
            • 60

            #6
            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.

            Comment

            • Selvan
              Automated Home Lurker
              • Jun 2018
              • 2

              #7
              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

              Comment

              • dty
                Automated Home Ninja
                • Aug 2016
                • 489

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

                Comment

                • filbert
                  Automated Home Guru
                  • Oct 2017
                  • 162

                  #9
                  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.

                  Comment

                  • DBMandrake
                    Automated Home Legend
                    • Sep 2014
                    • 2361

                    #10
                    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; 21 July 2018, 06:38 PM.

                    Comment

                    • paulockenden
                      Automated Home Legend
                      • Apr 2015
                      • 1719

                      #11
                      Most boilers specify an external ABV (or non-TRVed red) to allow for pump overrun.

                      Comment

                      Working...
                      X