import re, statistics path = r'logs_nuevos/log_2026-10-14.txt' lines = open(path, encoding='utf-8', errors='ignore').read().splitlines() pat = re.compile(r'\[(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\] X:(-?\d+),Y:(-?\d+),C:(\d+),V:(\d+)') rows = [] # (time, x, y, c, v) for l in lines: m = pat.search(l) if m: rows.append((m.group(1), int(m.group(2)), int(m.group(3)), int(m.group(4)), int(m.group(5)))) # Ventana donde X casi no se mueve pero C cae lentamente -> evidencia deriva termica # buscar tramo donde X dentro de +/-500 pasos durante muchos samples print('--- ventana con poca variacion en X pero caida de C ---') best_start = None; best_len = 0 i = 0 n = len(rows) while i < n - 60: window = rows[i:i+60] xs = [r[1] for r in window]; cs = [r[3] for r in window] x_spread = max(xs)-min(xs) c_drop = statistics.mean(cs[:15]) - statistics.mean(cs[-15:]) if x_spread < 1500 and c_drop > 3000: if best_len < 60: best_len = 60; best_start = i i += 1 else: i += 60 if best_start is not None: w = rows[best_start:best_start+60] print('inicio:', w[0][0], 'X rango:', min(r[1] for r in w), max(r[1] for r in w)) print('C primero/ultimo:', w[0][3], w[-1][3]) for j, r in enumerate(w): if j % 6 == 0: print('%s X:%7d Y:%7d C:%8d V:%8d' % (r[0][11:], r[1], r[2], r[3], r[4]))