Skip to content

Commit 11c5fed

Browse files
committed
Minor fix to can_decoder. Added support for optional signal prefixes via inputs.py file
1 parent f5d415d commit 11c5fed

File tree

6 files changed

+47
-33
lines changed

6 files changed

+47
-33
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
ap-northeast-1,arn:aws:lambda:ap-northeast-1:319723967016:layer:canedge-influxdb-writer-2:8
2-
ap-northeast-2,arn:aws:lambda:ap-northeast-2:319723967016:layer:canedge-influxdb-writer-2:8
3-
ap-northeast-3,arn:aws:lambda:ap-northeast-3:319723967016:layer:canedge-influxdb-writer-2:8
4-
ap-south-1,arn:aws:lambda:ap-south-1:319723967016:layer:canedge-influxdb-writer-2:8
5-
ap-southeast-1,arn:aws:lambda:ap-southeast-1:319723967016:layer:canedge-influxdb-writer-2:8
6-
ap-southeast-2,arn:aws:lambda:ap-southeast-2:319723967016:layer:canedge-influxdb-writer-2:8
7-
ca-central-1,arn:aws:lambda:ca-central-1:319723967016:layer:canedge-influxdb-writer-2:8
8-
eu-central-1,arn:aws:lambda:eu-central-1:319723967016:layer:canedge-influxdb-writer-2:10
9-
eu-north-1,arn:aws:lambda:eu-north-1:319723967016:layer:canedge-influxdb-writer-2:10
10-
eu-west-1,arn:aws:lambda:eu-west-1:319723967016:layer:canedge-influxdb-writer-2:8
11-
eu-west-2,arn:aws:lambda:eu-west-2:319723967016:layer:canedge-influxdb-writer-2:8
12-
eu-west-3,arn:aws:lambda:eu-west-3:319723967016:layer:canedge-influxdb-writer-2:8
13-
sa-east-1,arn:aws:lambda:sa-east-1:319723967016:layer:canedge-influxdb-writer-2:8
14-
us-east-1,arn:aws:lambda:us-east-1:319723967016:layer:canedge-influxdb-writer-2:8
15-
us-east-2,arn:aws:lambda:us-east-2:319723967016:layer:canedge-influxdb-writer-2:8
16-
us-west-1,arn:aws:lambda:us-west-1:319723967016:layer:canedge-influxdb-writer-2:8
17-
us-west-2,arn:aws:lambda:us-west-2:319723967016:layer:canedge-influxdb-writer-2:8
1+
ap-northeast-1,arn:aws:lambda:ap-northeast-1:319723967016:layer:canedge-influxdb-writer-2:9
2+
ap-northeast-2,arn:aws:lambda:ap-northeast-2:319723967016:layer:canedge-influxdb-writer-2:9
3+
ap-northeast-3,arn:aws:lambda:ap-northeast-3:319723967016:layer:canedge-influxdb-writer-2:9
4+
ap-south-1,arn:aws:lambda:ap-south-1:319723967016:layer:canedge-influxdb-writer-2:9
5+
ap-southeast-1,arn:aws:lambda:ap-southeast-1:319723967016:layer:canedge-influxdb-writer-2:9
6+
ap-southeast-2,arn:aws:lambda:ap-southeast-2:319723967016:layer:canedge-influxdb-writer-2:9
7+
ca-central-1,arn:aws:lambda:ca-central-1:319723967016:layer:canedge-influxdb-writer-2:9
8+
eu-central-1,arn:aws:lambda:eu-central-1:319723967016:layer:canedge-influxdb-writer-2:11
9+
eu-north-1,arn:aws:lambda:eu-north-1:319723967016:layer:canedge-influxdb-writer-2:11
10+
eu-west-1,arn:aws:lambda:eu-west-1:319723967016:layer:canedge-influxdb-writer-2:9
11+
eu-west-2,arn:aws:lambda:eu-west-2:319723967016:layer:canedge-influxdb-writer-2:9
12+
eu-west-3,arn:aws:lambda:eu-west-3:319723967016:layer:canedge-influxdb-writer-2:9
13+
sa-east-1,arn:aws:lambda:sa-east-1:319723967016:layer:canedge-influxdb-writer-2:9
14+
us-east-1,arn:aws:lambda:us-east-1:319723967016:layer:canedge-influxdb-writer-2:9
15+
us-east-2,arn:aws:lambda:us-east-2:319723967016:layer:canedge-influxdb-writer-2:9
16+
us-west-1,arn:aws:lambda:us-west-1:319723967016:layer:canedge-influxdb-writer-2:9
17+
us-west-2,arn:aws:lambda:us-west-2:319723967016:layer:canedge-influxdb-writer-2:9

deploy-aws-lambda/arn-layers/requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ aiosignal==1.2.0
55
async-timeout==4.0.2
66
attrs==21.4.0
77
botocore==1.23.24
8-
can-decoder>=0.1.8
8+
can-decoder>=0.1.9
99
canedge-browser>=0.0.8
1010
canmatrix==0.9.5
1111
certifi==2021.10.8

inputs.py

+4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111

1212
# -----------------------------------------------
1313
# specify DBC paths and a list of signals to process ([]: include all signals)
14+
# optionally include signal prefixes to make CAN ID, PGN and/or BusChannel explicit
1415
dbc_paths = ["dbc_files/canmod-gps.dbc"]
1516
signals = []
17+
can_id_prefix = False
18+
pgn_prefix = False
19+
bus_prefix = False
1620

1721
# specify resampling frequency. Setting this to "" means no resampling (much slower)
1822
res = "5S"

main.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
list_log_files,
55
ProcessData,
66
MultiFrameDecoder,
7-
restructure_data
7+
restructure_data,
8+
add_signal_prefix
89
)
910
from utils_db import SetupInflux
1011
import inputs as inp
@@ -30,6 +31,8 @@
3031

3132
df_phys = proc.extract_phys(df_raw)
3233
proc.print_log_summary(device_id, log_file, df_phys)
34+
35+
df_phys = add_signal_prefix(df_phys, can_id_prefix=inp.can_id_prefix, pgn_prefix=inp.pgn_prefix, bus_prefix=inp.bus_prefix)
3336

3437
df_phys = restructure_data(df_phys,inp.res)
3538
influx.write_signals(device_id, df_phys)

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ aiosignal==1.2.0
55
async-timeout==4.0.2
66
attrs==21.4.0
77
botocore==1.23.24
8-
can-decoder>=0.1.8
8+
can-decoder>=0.1.9
99
canedge-browser>=0.0.8
1010
canmatrix==0.9.5
1111
certifi==2021.10.8

utils.py

+20-13
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,22 @@ def list_log_files(fs, devices, start_times, verbose=True, passwords={}):
7373

7474
return log_files
7575

76-
def add_signal_prefix(df_phys, can_id_prefix=False, pgn_prefix=False):
76+
def add_signal_prefix(df_phys, can_id_prefix=False, pgn_prefix=False, bus_prefix=False):
7777
"""Rename Signal names by prefixing the full
7878
CAN ID (in hex) and/or J1939 PGN
7979
"""
8080
from J1939_PGN import J1939_PGN
81-
82-
if can_id_prefix == True and pgn_prefix == False:
83-
df_phys["Signal"] = df_phys["CAN ID"].apply(lambda x: f"{hex(int(x))[2:].upper()}") + "." + df_phys["Signal"]
84-
elif can_id_prefix == True and pgn_prefix == True:
85-
df_phys["Signal"] = df_phys["CAN ID"].apply(lambda x: f"{hex(int(x))[2:].upper()}.{J1939_PGN(int(x)).pgn}") + "." + df_phys["Signal"]
86-
elif can_id_prefix == False and pgn_prefix == True:
87-
df_phys["Signal"] = df_phys["CAN ID"].apply(lambda x: f"{J1939_PGN(int(x)).pgn}") + "." + df_phys["Signal"]
88-
81+
82+
prefix = ""
83+
if bus_prefix:
84+
prefix += df_phys["BusChannel"].apply(lambda x: f"{x}.")
85+
if can_id_prefix:
86+
prefix += df_phys["CAN ID"].apply(lambda x: f"{hex(int(x))[2:].upper()}." )
87+
if pgn_prefix:
88+
prefix += df_phys["CAN ID"].apply(lambda x: f"{J1939_PGN(int(x)).pgn}.")
89+
90+
df_phys["Signal"] = prefix + df_phys["Signal"]
91+
8992
return df_phys
9093

9194
def restructure_data(df_phys, res, ffill=False):
@@ -173,11 +176,15 @@ def extract_phys(self, df_raw):
173176
for db in self.db_list:
174177
df_decoder = can_decoder.DataFrameDecoder(db)
175178

176-
for length, group in df_raw.groupby("DataLength"):
177-
df_phys_temp.append(df_decoder.decode_frame(group))
178-
179+
for bus, bus_group in df_raw.groupby("BusChannel"):
180+
for length, group in bus_group.groupby("DataLength"):
181+
df_phys_group = df_decoder.decode_frame(group)
182+
if not df_phys_group.empty:
183+
df_phys_group["BusChannel"] = bus
184+
df_phys_temp.append(df_phys_group)
185+
179186
df_phys = pd.concat(df_phys_temp, ignore_index=False).sort_index()
180-
187+
181188
# remove duplicates in case multiple DBC files contain identical signals
182189
df_phys["datetime"] = df_phys.index
183190
df_phys = df_phys.drop_duplicates(keep="first")

0 commit comments

Comments
 (0)