custom device name for fake udp

This commit is contained in:
2025-02-13 10:43:33 +01:00
parent aa2069d4f4
commit 77af8c760e
3 changed files with 18 additions and 13 deletions

View File

@ -56,8 +56,8 @@ class NicosStream(Stream):
self.secnode_uri = {} self.secnode_uri = {}
super().__init__(uri, name) super().__init__(uri, name)
def init(self): def init(self, device=None, **kwds):
self.tags['device'] = 'nicos' self.tags['device'] = device or 'nicos'
self.send(f'@nicos/*\n{END_MARKER}{OP_ASK}') self.send(f'@nicos/*\n{END_MARKER}{OP_ASK}')
self._init = True self._init = True

View File

@ -19,7 +19,7 @@ class EnumConvert(dict):
class SecopStream(Stream): class SecopStream(Stream):
ping_time = 0 ping_time = 0
def init(self): def init(self, device=None, **kwds):
self._buffer = [] self._buffer = []
self.send('*IDN?') self.send('*IDN?')
resend = True resend = True
@ -41,7 +41,7 @@ class SecopStream(Stream):
else: else:
raise ValueError('missing describing message') raise ValueError('missing describing message')
self.descr = json.loads(match.group(1)) self.descr = json.loads(match.group(1))
self.device = self.descr['equipment_id'] self.device = device or self.descr['equipment_id']
if self.device.endswith('psi.ch'): if self.device.endswith('psi.ch'):
self.device[-6:] = [] self.device[-6:] = []
self.tags['device'] = self.device self.tags['device'] = self.device
@ -110,13 +110,18 @@ class UdpStream(Base):
except socket.error: # pragma: no cover except socket.error: # pragma: no cover
return None return None
msg = json.loads(msg.decode('utf-8')) msg = json.loads(msg.decode('utf-8'))
if msg['SECoP'] == 'for_other_node': kind = msg.pop('SECoP', None)
uri = msg['uri'] if not kind:
elif msg['SECoP'] == 'node': continue
if kind == 'for_other_node':
uri = msg.pop('uri')
kwargs = msg
elif kind == 'node':
uri = f"{addr[0]}:{msg['port']}" uri = f"{addr[0]}:{msg['port']}"
kwargs = {'name': msg['equipment_id']}
else: else:
continue continue
yield SecopStream, uri, msg['equipment_id'] yield SecopStream, uri, kwargs
class ScanReply(UdpStream): class ScanReply(UdpStream):

View File

@ -48,7 +48,7 @@ class Stream(Base):
_deadline = INF _deadline = INF
_next_connect = 0 _next_connect = 0
def __init__(self, uri, name=None, timeout=5, encoding='latin-1'): def __init__(self, uri, name=None, timeout=5, encoding='latin-1', **kwds):
self.name = name or uri self.name = name or uri
self.uri = uri self.uri = uri
self.tags = {} self.tags = {}
@ -63,7 +63,7 @@ class Stream(Base):
self.generator = self.event_generator() self.generator = self.event_generator()
try: try:
self.connect() self.connect()
self.init() self.init(**kwds)
except Exception as e: except Exception as e:
print(self.uri, repr(e)) print(self.uri, repr(e))
raise raise
@ -261,10 +261,10 @@ class EventStream:
while 1: while 1:
for stream in self.wait_ready(1): for stream in self.wait_ready(1):
if not isinstance(stream, Stream): if not isinstance(stream, Stream):
for streamcls, uri, *args in stream.events(): for streamcls, uri, kwargs in stream.events():
if uri not in self.streams: if uri not in self.streams:
print('add stream', uri, *args) print('add stream', uri, kwargs)
self.streams[uri] = streamcls(uri, *args) self.streams[uri] = streamcls(uri, **kwargs)
for name, stream in self.streams.items(): for name, stream in self.streams.items():
try: try:
if stream.get_events(events, maxevents): if stream.get_events(events, maxevents):