title: volttron set_multiple_points actuator agent rpc call
body: <p>Can I get a tip on how to use the actuator agent <code>set_multiple_points</code>?</p>
  <p>In the <a href="https://github.com/VOLTTRON/volttron/blob/releases/8.x/services/core/ActuatorAgent/actuator/agent.py#:%7E:text=def%20set_multiple_points(self%2C%20requester_id%2C%20topics_values%2C%20**kwargs)%3A" rel="nofollow noreferrer">actuator agent code</a>, I can see the method:</p>
  <pre><code>def set_multiple_points(self, requester_id, topics_values, **kwargs):
      &quot;&quot;&quot;RPC method
      Set multiple points on multiple devices. Makes a single
      RPC call to the platform driver per device.
      :param requester_id: Ignored, VIP Identity used internally
      :param topics_values: List of (topic, value) tuples
      :param \*\*kwargs: Any driver specific parameters
      :returns: Dictionary of points to exceptions raised.
                If all points were set successfully an empty
                dictionary will be returned.
      .. warning:: calling without previously scheduling *all* devices
                   and not within the time allotted will raise a LockError
      &quot;&quot;&quot;
  </code></pre>
  <p>In my CSV agent driver that I am experimenting with, I have 4 <code>devices</code> defined in the init, as well as a <code>point_topic</code> that is the same across all devices, and a <code>change_setpoint</code> to apply to all of the devices.</p>
  <pre><code>def __init__(self, csv_topic=&quot;&quot;, **kwargs):
      # Configure the base agent
      super(Csvdriveragent, self).__init__(**kwargs)
      _log.debug(&quot;vip_identity: &quot; + self.core.identity)
  
      # This agent is for testing purposes, so we'll default our ID
      self.agent_id = &quot;csv_actuation_agent&quot;
      
      # Get the topic that the Driver will publish to from the configuration file
      devices = {device1:'201201',
                  device2:'201202',
                  device3:'201203',
                  device4:'201204' 
      }      
  
      self.point_topic = self.topic + &quot;/&quot; + &quot;RmTmpSpt&quot;
  
      # This value will be used to send requests to the Driver to set a point on the device with an alternating value
      self.change_setpoint = 85
  </code></pre>
  <p>Can I get a tip on what the <code>rpc</code> call would look like for <code>set_multiple_points</code>?</p>
  <p>I know the comments state in a dictionary format, is this at all close below for how to put the rpc call together?</p>
  <pre><code>result = self.vip.rpc.call(
      'platform.actuator', 'set_multiple_points', devices, point_topic, self.change_setpoint).get(
      timeout=4)
  </code></pre>
  <p>Any tips for how to revert_multiple points back also greatly appreciated too. For example if a timer expires (<code>gevent.sleep()</code>) how would I revert all the point back to prior values?</p>