#!/usr/bin/env python3 """ Parser for L0-L7 binary energy data files from meterdata.archive. Liest das ZIP-Archiv meterdata.archive, durchsucht Verzeichnisse unter 'charts/', parsed L0-L7 Dateien und schreibt CSV-Dateien pro Verzeichnis. """ import struct import csv import sys import glob import re import zipfile import os from datetime import datetime, timedelta from io import BytesIO def decode_power_t(val_16bit): """ Wie gehabt: 16 bit packed -> Int32 Wert gemäss power_t Format """ if val_16bit == 0x5800: return 0x80000000 mant = val_16bit & 0x3FF expo = (val_16bit >> 10) & 0x1F sign = (val_16bit >> 15) & 0x1 if expo == 0: result = mant else: result = ((1 << 10) | mant) << (expo - 1) return -result if sign else result def parse_l0_binary(data): """Parse L0 binary data from bytes""" magic = struct.unpack('