← Function reference

src/bluesky_ros/pv_service.py

API source snapshot · 2026-09-24

#!/usr/bin/env python3
"""ROS service returning a PV's caget value. Run: python3 pv_service.py <PV_NAME>"""
import sys

import epics
import rclpy
from rclpy.node import Node
from std_srvs.srv import Trigger


class PVService(Node):
    def __init__(self, pvname):
        super().__init__("pv_service")
        self.pvname = pvname
        self.create_service(Trigger, "get_pv", self.on_request)
        self.get_logger().info(f"Serving caget({pvname}) on /get_pv")

    def on_request(self, request, response):
        value = epics.caget(self.pvname)
        response.success = value is not None
        response.message = str(value)
        return response


def main():
    if len(sys.argv) < 2:
        sys.exit("usage: pv_service.py <PV_NAME>")
    rclpy.init()
    rclpy.spin(PVService(sys.argv[1]))


if __name__ == "__main__":
    main()