code: def tell(self, data, timeout=10, mime=None):
          
          evt = self.tell_async(data, timeout=timeout, mime=mime)
          # No point in waiting longer than supplied timeout (as opposed to waiting for sync timeout)
          try:
              self._client._wait_and_except_if_failed(evt, timeout=timeout)
          except IOTSyncTimeout:
              return 'timeout'
          return True if evt.payload['success'] else evt.payload['reason']
docs: Order a remote control to do something.  Tell is confirmed in that you will receive
          a notification of the success or otherwise of the action at the far end via a callback
  
          `Example`
  
              #!python
              data = {"thermostat":18.0}
              retval = r_thermostat.tell(data, timeout=10, mime=None)
              if retval is not True:
                  print("Thermostat not reset - reason: {reason}".format(reason=retval))
  
          Returns True on success or else returns the reason (string) one of:
  
              #!python
              "timeout"     # The request-specified timeout has been reached.
              "unreachable" # The remote control is not associated with an agent
                            #     or is not reachable in some other way.
              "failed"      # The remote control indicates it did not perform
                            #     the request.
  
          Raises [IOTException](./Exceptions.m.html#IoticAgent.IOT.Exceptions.IOTException)
          containing the error if the infrastructure detects a problem
  
          Raises [LinkException](../Core/AmqpLink.m.html#IoticAgent.Core.AmqpLink.LinkException)
          if there is a communications problem between you and the infrastructure
  
          `data` (mandatory) (as applicable) The data you want to share
  
          `timeout` (optional) (int) Default 10.  The delay in seconds before your tell request times out.
  
          `mime` (optional) (string) See:
          [share()](./Point.m.html#IoticAgent.IOT.Point.Feed.share)