1
0
mirror of https://github.com/thooge/esp32-nmea2000-obp60.git synced 2026-02-11 07:03:07 +01:00

add filter to sendN2K

This commit is contained in:
wellenvogel
2025-09-23 19:07:53 +02:00
parent 13eac9508d
commit 4b03fa5a23

30
tools/sendN2K.py Normal file → Executable file
View File

@@ -3,6 +3,7 @@ import re
import sys import sys
import os import os
import datetime import datetime
import getopt
###generated with getPgnType.py from canboat pgns.json ###generated with getPgnType.py from canboat pgns.json
PGNM_Fast=0 PGNM_Fast=0
@@ -429,7 +430,7 @@ class CanFrame:
def key(self): def key(self):
if self.sequence is None or self.pgn == 0: if self.sequence is None or self.pgn == 0:
return None return None
return f"{self.pgn}-{self.sequence}" return f"{self.pgn}-{self.sequence}-{self.src}"
def getFPNum(self,bytes=False): def getFPNum(self,bytes=False):
if self.frame != 0: if self.frame != 0:
return None return None
@@ -497,14 +498,38 @@ class MultiFrame:
def __str__(self): def __str__(self):
return f"{self.firstFrame.ts},{self.firstFrame.prio},{self.firstFrame.pgn},{self.firstFrame.src},{self.firstFrame.dst},{self.numBytes},{dataToSep(self.bytes,self.numBytes)}" return f"{self.firstFrame.ts},{self.firstFrame.prio},{self.firstFrame.pgn},{self.firstFrame.src},{self.firstFrame.dst},{self.numBytes},{dataToSep(self.bytes,self.numBytes)}"
def usage():
print(f"usage: {sys.argv[0]} [-q] [-p pgn,pgn,...] file")
sys.exit(1)
if __name__ == '__main__': if __name__ == '__main__':
with open (sys.argv[1],"r") as fh: try:
opts,args=getopt.getopt(sys.argv[1:],"hp:q")
except getopt.GetoptError as err:
err(err)
pgnlist=[]
quiet=False
for o,a in opts:
if o == '-h':
usage()
elif o == '-q':
quiet=True
elif o == '-p':
pgns=(int(x) for x in a.split(","))
pgnlist.extend(pgns)
if len(args) < 1:
usage()
hasFilter=len(pgnlist) > 0
if not quiet and hasFilter:
print(f"PGNs: {','.join(str(x) for x in pgnlist)}")
with open (args[0],"r") as fh:
buffer={} buffer={}
lnr=0 lnr=0
for line in fh: for line in fh:
lnr+=1 lnr+=1
frame=CanFrame.fromDump(line) frame=CanFrame.fromDump(line)
if hasFilter and not frame.pgn in pgnlist:
continue
if frame.sequence is None: if frame.sequence is None:
print(frame) print(frame)
else: else:
@@ -513,6 +538,7 @@ if __name__ == '__main__':
mustDelete=False mustDelete=False
if mf is None: if mf is None:
if frame.frame != 0: if frame.frame != 0:
if not quiet:
print(f"floating multi frame in line {lnr}: {frame}",file=sys.stderr) print(f"floating multi frame in line {lnr}: {frame}",file=sys.stderr)
continue continue
mf=MultiFrame(frame) mf=MultiFrame(frame)