docs: def _read_settings(self, retry=True):
          """Read the information from the Hottop.
  
          Read the settings from the serial interface and convert them into a
          human-readable format that can be shared back to the end-user. Reading
          from the serial interface will occasionally produce strange results or
          blank reads, so a retry process has been built into the function as a
          recursive check.
  
          :returns: dict
          """
          if not self._conn.isOpen():
              self._log.debug("Reopening connection")
              self._conn.open()
          self._conn.flushInput()
          self._conn.flushOutput()
          buffer = self._conn.read(36)
          if len(buffer) != 36:
              self._log.debug('Buffer length (%d) did not match 36' % len(buffer))
              if self._conn.isOpen():
                  self._log.debug('Closing connection')
                  self._conn.close()
                  self._read_settings(retry=True)
  
          try:
              check = self._validate_checksum(buffer)
          except:
              check = False
  
          if not check and (retry and self._retry_count <= 3):
              if self._retry_count == 3:
                  self._log.error('Retry count reached on buffer check')
                  self._read_settings(retry=False)
              else:
                  self._retry_count += 1
                  self._read_settings(retry=True)
  
          try:
              settings = dict()
              settings['heater'] = hex2int(buffer[10])
              settings['fan'] = hex2int(buffer[11])
              settings['main_fan'] = hex2int(buffer[12])
              et = hex2int(buffer[23] + buffer[24])
              settings['environment_temp'] = celsius2fahrenheit(et)
              bt = hex2int(buffer[25] + buffer[26])
              settings['bean_temp'] = celsius2fahrenheit(bt)
              settings['solenoid'] = hex2int(buffer[16])
              settings['drum_motor'] = hex2int(buffer[17])
              settings['cooling_motor'] = hex2int(buffer[18])
              settings['chaff_tray'] = hex2int(buffer[19])
              self._retry_count = 0
          except Exception:
              self._log.error("Pulled a cache configuration!")
              settings = self._generate_config()
          return settings