VOLTTRON set_point

33 Views Asked by At

I am trying to use the actuator agent to write to a building automation point with set_point. This is the a snip from my Python code:

    _log.info(f'{log_prefix} - meter_topic: {meter_topic}')
    _log.info(f'{log_prefix} - self.electric_meter_value: {self.electric_meter_value}')

    self.vip.rpc.call('platform.actuator',
                    'set_point', 
                    self.core.identity, 
                    meter_topic,
                    self.electric_meter_value
                    ).get(timeout=300) 

This is the traceback in my volttron.log file:

2023-09-28 20:10:26,482 (rtuloadshedagent-0.1 49669) __main__ INFO: [WRITE POWER METER VAL INFO] - meter_topic: 500001/input-power-meter
2023-09-28 20:10:26,482 (rtuloadshedagent-0.1 49669) __main__ INFO: [WRITE POWER METER VAL INFO] - self.electric_meter_value: 0
2023-09-28 20:10:26,484 (platform_driveragent-4.0 49556) volttron.platform.vip.agent.subsystems.rpc ERROR: unhandled exception in JSON-RPC method 'set_point':
Traceback (most recent call last):
  File "/home/geb/volttron/volttron/platform/vip/agent/subsystems/rpc.py", line 181, in method
    return method(*args, **kwargs)
  File "/home/geb/.volttron/agents/21d572a4-52ef-4e75-b603-f5d56bfc9951/platform_driveragent-4.0/platform_driver/agent.py", line 468, in set_point
    return self.instances[path].set_point(point_name, value, **kwargs)
KeyError: '500001'

This is how the points are defined in VOLTTRON but unsure why I get the error? Unless its looking for this longer full string devices/slipstream_internal/slipstream_hq/500001. Any troubleshooting tips appreciated.

vctl config store platform.driver registry_configs/500001.csv registry_configs/500001.csv --csv 

vctl config store platform.driver devices/slipstream_internal/slipstream_hq/500001 devices/500001
2

There are 2 best solutions below

0
rlutes On BEST ANSWER

You are correct, so it is looking for "slipstream_internal/slipstream_hq/500001".

vctl config store <vip-id> <config_name> <config_file>

It is interesting, as you must have a file at ./devices/500001 or the vctl store command would have produced an error.

0
bbartling On

this appears to be working here is the complete method that is ran every 60 seconds from the on start self.core.periodic(60, self.bacnet_write_meter_val):

import logging
import sys

from volttron.platform.agent.utils import format_timestamp, get_aware_utc_now
from volttron.platform.agent import utils
from volttron.platform.vip.agent import Agent, Core, RPC

from datetime import timedelta as td

    def bacnet_write_meter_val(self):
        log_prefix = '[WRITE POWER METER VAL INFO]'
        
        _log.info(f'{log_prefix} - bacnet_write_meter_val: {self.electric_meter_value}')

        _now = get_aware_utc_now()
        str_start = format_timestamp(_now)
        _end = _now + td(seconds=10)
        str_end = format_timestamp(_end)

        device = "slipstream_internal/slipstream_hq/500001"
        point_topic = f"{device}/input-power-meter"
        
        actuator_schedule_request = [[device, str_start, str_end]]
        _log.info(f'{log_prefix} - actuator_schedule_request: {actuator_schedule_request}')

        self.vip.rpc.call('platform.actuator', 
                        'request_new_schedule', 
                        self.core.identity, 
                        'meter_write_val', 
                        'HIGH', 
                        actuator_schedule_request).get(timeout=90)

        _log.info(f'{log_prefix} - meter_topic: {point_topic}')
        _log.info(f'{log_prefix} - self.electric_meter_value: {self.electric_meter_value}')

        self.vip.rpc.call('platform.actuator',
                        'set_point', 
                        self.core.identity, 
                        point_topic,
                        self.electric_meter_value
                        ).get(timeout=300)    
        
        _log.info(f'{log_prefix} - bacnet_write_meter_val success')

I think its looking for thecomplete devices/slipstream_internal/slipstream_hq/500001 and not just devices/500001