Source code for pypot.robot.remote
import zerorpc
[docs]class RemoteRobotClient(object):
""" Remote Access to a Robot through the REST API.
This RemoteRobot gives you access to motors and alias.
For each motor you can read/write all of their registers.
You also have access to primitives.
More specifically you can start/stop them.
"""
def __init__(self, host, port):
client = zerorpc.Client()
client.connect('tcp://{}:{}'.format(host, port))
self.motors = []
for name in client.get_motors_list():
class Register(object):
def __init__(self, motorname, regname):
self.motorname = motorname
self.regname = regname
def __get__(self, instance, owner):
return client.get_register_value(self.motorname, self.regname)
def __set__(self, instance, value):
client.set_register_value(self.motorname, self.regname, value)
class Motor(object):
def __repr__(self):
return ('<Motor name={self.name} '
'id={self.id} '
'pos={self.present_position}>').format(self=self)
for reg in client.get_registers_list(name):
setattr(Motor, reg.decode(), Register(name, reg))
m = Motor()
setattr(self, m.name, m)
self.motors.append(m)
for alias in client.get_motors_alias():
motors = [getattr(self, name) for name in client.get_motors_list(alias)]
setattr(self, alias, motors)
class Primitive(object):
def __init__(self, name):
self.name = name
def start(self):
client.start_primitive(self.name)
def stop(self):
client.stop_primitive(self.name)
self.primitives = []
for p in client.get_primitives_list():
prim = Primitive(p)
setattr(self, p.decode(), prim)
self.primitives.append(prim)
[docs]def from_remote(host, port):
""" Remote access to a Robot through the REST API. """
return RemoteRobotClient(host, port)