code: func restUpdateProvisionWatcher(w http.ResponseWriter, r *http.Request) {
  	defer r.Body.Close()
  	var from models.ProvisionWatcher
  	if err := json.NewDecoder(r.Body).Decode(&from); err != nil {
  		LoggingClient.Error(err.Error())
  		http.Error(w, err.Error(), http.StatusServiceUnavailable)
  		return
  	}
  
  	// Check if the provision watcher exists
  	// Try by ID
  	to, err := dbClient.GetProvisionWatcherById(from.Id)
  	if err != nil {
  		// Try by name
  		if to, err = dbClient.GetProvisionWatcherByName(from.Name); err != nil {
  			if err == db.ErrNotFound {
  				http.Error(w, "Provision watcher not found", http.StatusNotFound)
  				LoggingClient.Error("Provision watcher not found: " + err.Error())
  			} else {
  				LoggingClient.Error("Problem getting provision watcher: " + err.Error())
  				http.Error(w, err.Error(), http.StatusServiceUnavailable)
  			}
  			return
  		}
  	}
  
  	if err := updateProvisionWatcherFields(from, &to, w); err != nil {
  		LoggingClient.Error("Problem updating provision watcher: " + err.Error())
  		return
  	}
  
  	if err := dbClient.UpdateProvisionWatcher(to); err != nil {
  		LoggingClient.Error("Problem updating provision watcher: " + err.Error())
  		http.Error(w, err.Error(), http.StatusServiceUnavailable)
  		return
  	}
  
  	// Notify Associates
  	if err := notifyProvisionWatcherAssociates(to, http.MethodPut); err != nil {
  		LoggingClient.Error("Problem notifying associated device services for provision watcher: " + err.Error())
  	}
  	w.Header().Set("Content-Type", "application/json")
  	w.WriteHeader(http.StatusOK)
  	w.Write([]byte("true"))
  }
docs: // Update the provision watcher object
  // ID is used first for identification, then name
  // The service and profile cannot be updated