mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-07 00:09:51 +03:00
optimized scripts
This commit is contained in:
@@ -158,15 +158,15 @@ cpp_entry_template = Template(
|
||||
# read translations
|
||||
listNames = {}
|
||||
transre = re.compile(r'^MAKE_TRANSLATION\(([^,\s]+)\s*,\s*\"([^\"]+)\"')
|
||||
transf = open('./src/core/locale_translations.h', 'r')
|
||||
while True:
|
||||
line = transf.readline()
|
||||
if not line:
|
||||
break
|
||||
m = transre.match(line)
|
||||
if m is not None:
|
||||
listNames[m.group(2)] = m.group(1)
|
||||
transf.close()
|
||||
try:
|
||||
with open('./src/core/locale_translations.h', 'r') as transf:
|
||||
for line in transf:
|
||||
m = transre.match(line)
|
||||
if m is not None:
|
||||
listNames[m.group(2)] = m.group(1)
|
||||
except FileNotFoundError:
|
||||
# Handle case where file doesn't exist
|
||||
pass
|
||||
|
||||
entities = []
|
||||
|
||||
@@ -175,10 +175,8 @@ with fileinput.input() as f_input:
|
||||
headers = next(entities_reader)
|
||||
|
||||
for row in entities_reader:
|
||||
entity = {}
|
||||
for i, val in enumerate(row):
|
||||
# print(headers[i] + ": " + val)
|
||||
entity[headers[i]] = val
|
||||
# Use dict comprehension for better performance
|
||||
entity = {headers[i]: val for i, val in enumerate(row)}
|
||||
entities.append(entity)
|
||||
|
||||
# print(json.dumps(entities, indent=" "))
|
||||
@@ -234,30 +232,28 @@ for entity in entities:
|
||||
|
||||
for device_type_name, device_type in device_types.items():
|
||||
for tag, entities in device_type.items():
|
||||
total_registers = 0
|
||||
# Pre-calculate all register info to avoid repeated int() conversions
|
||||
register_info = []
|
||||
next_free_offset = 0
|
||||
|
||||
for entity_name, modbus_info in entities.items():
|
||||
register_offset = int(modbus_info['modbus offset'])
|
||||
register_count = int(modbus_info['modbus count'])
|
||||
total_registers += register_count
|
||||
register_info.append(
|
||||
(entity_name, modbus_info, register_offset, register_count))
|
||||
|
||||
if register_offset >= 0 and register_offset + register_count > next_free_offset:
|
||||
next_free_offset = register_offset + register_count
|
||||
|
||||
# print(device_type_name + "/" + tag + ": total_registers=" + str(total_registers) + "; next_free_offset=" + str(
|
||||
# next_free_offset))
|
||||
|
||||
for entity_name, modbus_info in entities.items():
|
||||
register_offset = int(modbus_info['modbus offset'])
|
||||
register_count = int(modbus_info['modbus count'])
|
||||
# Assign registers for unassigned entities
|
||||
for entity_name, modbus_info, register_offset, register_count in register_info:
|
||||
if register_offset < 0 and register_count > 0:
|
||||
# assign register
|
||||
# print("assign " + entity_name + " -> " + str(next_free_offset))
|
||||
modbus_info['modbus offset'] = str(next_free_offset)
|
||||
next_free_offset += register_count
|
||||
|
||||
# OUTPUT
|
||||
|
||||
cpp_entries = ""
|
||||
cpp_entries = []
|
||||
|
||||
# traverse all elements in correct order so they are correctly sorted
|
||||
for device_type_name in device_type_names:
|
||||
@@ -267,18 +263,22 @@ for device_type_name in device_type_names:
|
||||
tag = str(ntag)
|
||||
if tag in device_type:
|
||||
entities = device_type[tag]
|
||||
for entity_name, modbus_info in sorted(entities.items(), key=lambda x: int(x[1]["modbus offset"])):
|
||||
# Sort once and reuse
|
||||
sorted_entities = sorted(
|
||||
entities.items(), key=lambda x: int(x[1]["modbus offset"]))
|
||||
for entity_name, modbus_info in sorted_entities:
|
||||
params = {
|
||||
'devtype': "dt::" + device_type_name,
|
||||
# re.sub(r"[0-9]+", "*", tag),
|
||||
"tagtype": tag_to_tagtype[int(tag)],
|
||||
"shortname": 'FL_(' + listNames[entity_name] + ")",
|
||||
"entity_name": entity_name,
|
||||
'registeroffset': modbus_info["modbus offset"],
|
||||
'registercount': modbus_info["modbus count"]
|
||||
}
|
||||
# print(entitypath + ": " + str(modbus_info))
|
||||
cpp_entries += cpp_entry_template.substitute(params)
|
||||
cpp_entries.append(cpp_entry_template.substitute(params))
|
||||
|
||||
cpp_src = cpp_file_template.substitute({'entries': cpp_entries})
|
||||
# Join all entries at once
|
||||
cpp_entries_str = "".join(cpp_entries)
|
||||
|
||||
cpp_src = cpp_file_template.substitute({'entries': cpp_entries_str})
|
||||
print(cpp_src)
|
||||
|
||||
Reference in New Issue
Block a user