whole_func_string: function(thisObject, commandClass, requestCommand, data, responseCommand, responseMatchingId) {
      if (typeof responseMatchingId === "undefined") {
          // default
          responseMatchingId = null;
      }
  
      return new Promise(function(resolve, reject) {
          // register our response callback (so that we are listening for the response)
          let commandCallbackObject = thisObject.registerResponseCallback(commandClass, responseCommand, responseMatchingId, INTERNAL_ZWAVE_RESPONSE_TIMEOUT_MS, 
            false /* response is not wrapped in Z/IP frame */, function(response, timeoutOccurred) {
              if (timeoutOccurred) { // timeout
                  reject(new TimeoutError());
              } else { // response received
                  resolve(response);
              }
          });
  
          sendRawMessage(thisObject, commandClass, requestCommand, data);
      });
  }
func_code_string: function(thisObject, commandClass, requestCommand, data, responseCommand, responseMatchingId) {
      if (typeof responseMatchingId === "undefined") {
          // default
          responseMatchingId = null;
      }
  
      return new Promise(function(resolve, reject) {
          // register our response callback (so that we are listening for the response)
          let commandCallbackObject = thisObject.registerResponseCallback(commandClass, responseCommand, responseMatchingId, INTERNAL_ZWAVE_RESPONSE_TIMEOUT_MS, 
            false /* response is not wrapped in Z/IP frame */, function(response, timeoutOccurred) {
              if (timeoutOccurred) { // timeout
                  reject(new TimeoutError());
              } else { // response received
                  resolve(response);
              }
          });
  
          sendRawMessage(thisObject, commandClass, requestCommand, data);
      });
  }
func_documentation_string: NOTE: this function sends a raw Z-Wave command, does not wait for an ACK, but does wait for a (raw) response