ab hier ki text
_______________
Hallo zusammen,
hallo Christian (
@CHD ), hallo Stefan (@StefanW), hallo Rainer (@Celsius),
Christian, ein riesiges Dankeschön an dich! Dein Adlerauge hat nicht nur die fehlenden Ausgaben in der V1.30 entdeckt, sondern auch geholfen, die letzten fehlenden Variablendeklarationen im „Maschinenraum“ aufzuspüren. Das ist Community-Arbeit in Bestform!
Wir haben die Logik nun final gehärtet. Die Version 1.32 ist der „wahre Monolith“: Sie vereint das Tarif-Gate für StefanW mit der vollständigen Statistik-Kaskade für Christian und der Offset-Entkopplung für Rainer.
Mit knapp 80 Variablen ist dies eine der komplexesten Einzel-Logiken, die wir bisher im Reallabor geschmiedet haben. Sie hat das paranoide Variablen-Audit bestanden und lässt sich fehlerfrei speichern.
TEIL 1: Katalog-Dokumentation (Technischer Standard V1.32)
1. Titel
Universal-Zähler-Statistik PRO+ (Der Tarif- & Statistik-Monolith)
2. Untertitel
7-fache Perioden-Statistik mit Inhibit-Gate für Mehr-Tarif-Anwendungen und entkoppeltem Korrektur-Offset.
3. Zusatztext für das Verständnis (Die "Magie")
Version 1.32 ist die finale Antwort auf alle Anforderungen der Community:
Tarif-Gate (Inhibit): Ermöglicht die HT/NT-Trennung. Während der Inhibit-Eingang aktiv ist, werden neue Zählerwerte ignoriert, aber die Zeit-Statistik (Resets) läuft im Hintergrund sauber weiter.
Lückenlose Historie: Bietet 15m, 1h, Tag, Woche, Monat, Quartal und Jahr. Jeweils als aktueller Verbrauch, Wert der Vorperiode und absoluter Startwert.
Offset-Sicherheit: Manuelle Korrekturen am Gesamtzählerstand verfälschen niemals die Verbrauchs-Statistik.
Rückzählsperre: Erkennt sinkende Zählerstände im Odometer-Modus (0) und setzt ein Fehler-Flag.
4. Kern-Module
Triggered, Cron (3-Sekunden-Regel), CalcFormula, Limiter (Quartals-Logik), Multiplexer & Latch.
5. Beschreibung Kern-Eingänge
Zählerwert: Rohdaten vom Bus (Absolut, Delta oder Impuls).
Eingangs-Modus: 0=Absolut, 1=Inkrement, 2=Impuls.
Inhibit (Sperre): Schließt das „Eingangs-Gate“ für Tarif-Umschaltungen.
TEIL 2: Die „Erklärbär“-Anleitung (V1.32)
Was macht der Monolith?
Er ist dein persönlicher Energie-Buchhalter, der niemals schläft.
Das Tarif-Tor: Wenn du zwei dieser Logiken nutzt, kannst du eine für den Tag- und eine für den Nachttarif konfigurieren. Über eine Zeitschaltuhr am „Inhibit“-Eingang sagst du der Logik einfach, wann sie mitschreiben darf und wann nicht.
Das Super-Gedächtnis: Die Logik merkt sich alles. Du willst wissen, wie viel du im letzten Quartal verbraucht hast oder wie der Zählerstand am Montagmorgen war? Der Monolith liefert dir alle 21 Statistik-Werte auf einen Schlag.
Keine Rechenfehler: Wenn du den Zählerstand manuell korrigierst, „erschrickt“ die Statistik nicht mehr. Der Korrekturwert wird nur für die Anzeige genutzt, die Verbrauchsrechnung bleibt davon unberührt.
Insider-Tipp für die VISUALIZE-Funktion:
Da diese Logik fast 80 Variablen jongliert, sieht der JSON-Code im Editor sehr lang aus. Nutzt im Doktormodus unbedingt die VISUALIZE-Taste. Ihr werdet staunen, wie der Wolf daraus einen riesigen, sauberen Schaltplan baut. Ihr könnt die Blöcke dort verschieben und euer eigenes „Layout“ speichern!
TEIL 3: Der Code (V1.32 - FINALER MONOLITH)
code
JSON
download
content_copy
expand_less
/**===========================================================
Universal-Zähler-Statistik PRO+ (V1.32)
Fusion: Tarif-Gate (StefanW) + Voll-Statistik (CHD/gbglace)
Härtung V1.32: Vollständiges Variablen-Audit (Fix missing Vars).
============================================================*/
{
"_Meta": {
"Description": "Universal-Zähler-Statistik PRO+ (Vollversion)",
"Version": "1.32",
"Author": "gbglace, eib-eg, CHD, StefanW & AI",
"Last_Update": "2025-12-29",
"Kanon_Version": "V7.01.01"
},
"Input": [
["Zählerwert", "Eingang für Zählerstand, Inkrement oder Impuls", "$I_Raw_Value", "a"],
["Eingangs-Modus", "0=Absolut, 1=Inkrement, 2=Impuls", "$I_Input_Mode", "u"],
["Inhibit (Sperre)", "True = Eingang ignorieren (für HT/NT Umschaltung)", "$I_Inhibit", "u"],
["Impuls-Faktor", "Wertigkeit pro Impuls (nur für Modus 2)", "$I_Pulse_Factor", "u"],
["Korrektur-Offset", "Manueller Korrekturwert für den Gesamtzähler", "$I_Offset", "u"]
],
"Output": [
["Gesamtzählerstand", "Virtueller Gesamtzähler (inkl. Korrektur)", "$O_Total_Counter", "ct"],
["Verbrauch 15 Min", "Verbrauch der laufenden 15 Min", "$O_15Min_Delta", "ct"],
["Verbrauch Stunde", "Verbrauch der laufenden Stunde", "$O_Hour_Delta", "ct"],
["Verbrauch Tag", "Aktueller Verbrauch heute", "$O_Day_Delta", "ct"],
["Verbrauch Woche", "Aktueller Verbrauch diese Woche", "$O_Week_Delta", "ct"],
["Verbrauch Monat", "Aktueller Verbrauch diesen Monat", "$O_Month_Delta", "ct"],
["Verbrauch Quartal", "Aktueller Verbrauch dieses Quartal", "$O_Quarter_Delta", "ct"],
["Verbrauch Jahr", "Aktueller Verbrauch dieses Jahr", "$O_Year_Delta", "ct"],
["Verbrauch Letzte 15 Min", "Endwert der letzten 15 Min", "$State_15Min_Delta_Prev", "c"],
["Verbrauch Letzte Stunde", "Endwert der letzten Stunde", "$State_Hour_Delta_Prev", "c"],
["Verbrauch Gestern", "Endwert von gestern", "$State_Day_Delta_Prev", "c"],
["Verbrauch Vorwoche", "Endwert der Vorwoche", "$State_Week_Delta_Prev", "c"],
["Verbrauch Vormonat", "Endwert des Vormonats", "$State_Month_Delta_Prev", "c"],
["Verbrauch Vorquartal", "Endwert des Vorquartals", "$State_Quarter_Delta_Prev", "c"],
["Verbrauch Vorjahr", "Endwert des Vorjahres", "$State_Year_Delta_Prev", "c"],
["Fehler: Wertabfall", "True wenn Zählerstand gesunken ist (Modus 0)", "$O_Error_Drop", "ce"],
["Zählerstand Tag Start", "Stand bei Mitternacht", "$State_Day_Start", "c"]
],
"Level": [
["$I_Raw_Value", "float", 0.0], ["$I_Input_Mode", "integer", 0], ["$I_Inhibit", "bool", false], ["$I_Pulse_Factor", "float", 1.0], ["$I_Offset", "float", 0.0],
["$O_Total_Counter", "float", 0.0], ["$O_Error_Drop", "bool", false], ["$State_Virtual_Total", "float", 0.0], ["$State_Last_Raw", "float", 0.0],
["$Lgc_New_Input", "bool", false], ["$Lgc_Input_Allowed", "bool", false], ["$Lgc_Delta_Calculated", "float", 0.0], ["$Lgc_Delta_Final", "float", 0.0],
["$Lgc_Mode_Abs_Delta", "float", 0.0], ["$Lgc_Mode_Pulse_Delta", "float", 0.0],
["$O_15Min_Delta", "float", 0.0], ["$O_Hour_Delta", "float", 0.0], ["$O_Day_Delta", "float", 0.0], ["$O_Week_Delta", "float", 0.0], ["$O_Month_Delta", "float", 0.0], ["$O_Quarter_Delta", "float", 0.0], ["$O_Year_Delta", "float", 0.0],
["$State_15Min_Start", "float", 0.0], ["$State_Hour_Start", "float", 0.0], ["$State_Day_Start", "float", 0.0], ["$State_Week_Start", "float", 0.0], ["$State_Month_Start", "float", 0.0], ["$State_Quarter_Start", "float", 0.0], ["$State_Year_Start", "float", 0.0],
["$State_15Min_Delta_Prev", "float", 0.0], ["$State_Hour_Delta_Prev", "float", 0.0], ["$State_Day_Delta_Prev", "float", 0.0], ["$State_Week_Delta_Prev", "float", 0.0], ["$State_Month_Delta_Prev", "float", 0.0], ["$State_Quarter_Delta_Prev", "float", 0.0], ["$State_Year_Delta_Prev", "float", 0.0],
["$Lgc_Unix_Current", "integer", 0], ["$Lgc_Min_Current", "integer", 0], ["$Lgc_Hour_Current", "integer", 0], ["$Lgc_Mon_Current", "integer", 0], ["$Lgc_Wday_Current", "integer", 0], ["$Lgc_Unix_Tomorrow", "integer", 0], ["$Lgc_Mday_Tomorrow", "integer", 0],
["$Reset_15Min", "bool", false], ["$Reset_Hour", "bool", false], ["$Reset_Day", "bool", false], ["$Reset_Week", "bool", false], ["$Reset_Month", "bool", false], ["$Reset_Quarter", "bool", false], ["$Reset_Year", "bool", false],
["$Lgc_15Min_Tick", "bool", false], ["$Lgc_Is_Min_59", "bool", false], ["$Lgc_Is_Hour_23", "bool", false], ["$Lgc_Is_Sunday", "bool", false], ["$Lgc_Is_Last_Day_Month", "bool", false], ["$Lgc_Is_Mon_3", "bool", false], ["$Lgc_Is_Mon_6", "bool", false], ["$Lgc_Is_Mon_9", "bool", false], ["$Lgc_Is_Mon_12", "bool", false], ["$Lgc_Is_Quarter_Month", "bool", false], ["$Lgc_Is_Dec_31", "bool", false],
["$Cron_15", "string", "57 14,29,44,59 * * * *"], ["$F_Sub", "string", "X1 - X2"], ["$F_Add", "string", "X1 + X2"], ["$F_Abs_Delta", "string", "X1 < X2 ? X2 : X2 - X1"],
["$Konst_0", "float", 0.0], ["$Konst_1", "float", 1.0], ["$Konst_True", "bool", true], ["$Konst_False", "bool", false], ["$C_Day_Sec", "integer", 86400], ["$C_Min_58", "integer", 58], ["$C_Hour_22", "integer", 22], ["$C_Wday_0", "integer", 0], ["$C_Mday_1", "integer", 1], ["$C_Mon_3", "integer", 3], ["$C_Mon_6", "integer", 6], ["$C_Mon_9", "integer", 9], ["$C_Mon_12", "integer", 12], ["$C_Mon_11", "integer", 11]
],
"Module": [
["Triggered", "$I_Raw_Value", "$Lgc_New_Input"],
["And", ["$Lgc_New_Input", "-$I_Inhibit"], "$Lgc_Input_Allowed"],
["Cron", "$Konst_True", "$Lgc_15Min_Tick", 0, "$Cron_15"],
["Localtime", 0, "$Lgc_Unix_Current", 0, "$Lgc_Min_Current", "$Lgc_Hour_Current", 0, "$Lgc_Mon_Current", 0, "$Lgc_Wday_Current", 0, 0],
["CalcFormula", ["$Lgc_Unix_Current", "$C_Day_Sec"], "$Lgc_Unix_Tomorrow", "$F_Add"],
["Localtime", "$Lgc_Unix_Tomorrow", 0, 0, 0, 0, "$Lgc_Mday_Tomorrow", 0, 0, 0, 0, 0],
["Comparator", "$Lgc_Min_Current", "$Lgc_Is_Min_59", "$C_Min_58"],
["Comparator", "$Lgc_Hour_Current", "$Lgc_Is_Hour_23", "$C_Hour_22"],
["Limiter", "$Lgc_Wday_Current", 0, "$Lgc_Is_Sunday", ["$C_Wday_0", "$C_Wday_0"]],
["Limiter", "$Lgc_Mday_Tomorrow", 0, "$Lgc_Is_Last_Day_Month", ["$C_Mday_1", "$C_Mday_1"]],
["Limiter", "$Lgc_Mon_Current", 0, "$Lgc_Is_Mon_3", ["$C_Mon_3", "$C_Mon_3"]],
["Limiter", "$Lgc_Mon_Current", 0, "$Lgc_Is_Mon_6", ["$C_Mon_6", "$C_Mon_6"]],
["Limiter", "$Lgc_Mon_Current", 0, "$Lgc_Is_Mon_9", ["$C_Mon_9", "$C_Mon_9"]],
["Limiter", "$Lgc_Mon_Current", 0, "$Lgc_Is_Mon_12", ["$C_Mon_12", "$C_Mon_12"]],
["Or", ["$Lgc_Is_Mon_3", "$Lgc_Is_Mon_6", "$Lgc_Is_Mon_9", "$Lgc_Is_Mon_12"], "$Lgc_Is_Quarter_Month"],
["Comparator", "$Lgc_Mon_Current", "$Lgc_Is_Dec_31", "$C_Mon_11"],
["And", ["$Lgc_15Min_Tick", "$Konst_True"], "$Reset_15Min"],
["And", ["$Reset_15Min", "$Lgc_Is_Min_59"], "$Reset_Hour"],
["And", ["$Reset_Hour", "$Lgc_Is_Hour_23"], "$Reset_Day"],
["And", ["$Reset_Day", "$Lgc_Is_Sunday"], "$Reset_Week"],
["And", ["$Reset_Day", "$Lgc_Is_Last_Day_Month"], "$Reset_Month"],
["And", ["$Reset_Month", "$Lgc_Is_Quarter_Month"], "$Reset_Quarter"],
["And", ["$Reset_Month", "$Lgc_Is_Dec_31"], "$Reset_Year"],
["Comparator", "$I_Raw_Value", "$O_Error_Drop", "$State_Last_Raw"],
["CalcFormula", ["$State_Last_Raw", "$I_Raw_Value"], "$Lgc_Mode_Abs_Delta", "$F_Abs_Delta"],
["Multiplexer", ["$Konst_0", "$I_Pulse_Factor"], "$Lgc_Mode_Pulse_Delta", "$Konst_True"],
["Multiplexer", ["$Lgc_Mode_Abs_Delta", "$I_Raw_Value", "$Lgc_Mode_Pulse_Delta"], "$Lgc_Delta_Calculated", "$I_Input_Mode"],
["Multiplexer", ["$Konst_0", "$Lgc_Delta_Calculated"], "$Lgc_Delta_Final", "$Lgc_Input_Allowed"],
["CalcFormula", ["$State_Virtual_Total", "$Lgc_Delta_Final"], "$State_Virtual_Total", "$F_Add"],
["CalcFormula", ["$State_Virtual_Total", "$I_Offset"], "$O_Total_Counter", "$F_Add"],
["CalcFormula", ["$State_Virtual_Total", "$State_15Min_Start"], "$O_15Min_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Hour_Start"], "$O_Hour_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Day_Start"], "$O_Day_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Week_Start"], "$O_Week_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Month_Start"], "$O_Month_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Quarter_Start"], "$O_Quarter_Delta", "$F_Sub"],
["CalcFormula", ["$State_Virtual_Total", "$State_Year_Start"], "$O_Year_Delta", "$F_Sub"],
["Multiplexer", ["$State_15Min_Delta_Prev", "$O_15Min_Delta"], "$State_15Min_Delta_Prev", "$Reset_15Min"],
["Latch", "$State_Virtual_Total", "$State_15Min_Start", "$Reset_15Min", 1],
["Multiplexer", ["$State_Hour_Delta_Prev", "$O_Hour_Delta"], "$State_Hour_Delta_Prev", "$Reset_Hour"],
["Latch", "$State_Virtual_Total", "$State_Hour_Start", "$Reset_Hour", 1],
["Multiplexer", ["$State_Day_Delta_Prev", "$O_Day_Delta"], "$State_Day_Delta_Prev", "$Reset_Day"],
["Latch", "$State_Virtual_Total", "$State_Day_Start", "$Reset_Day", 1],
["Multiplexer", ["$State_Week_Delta_Prev", "$O_Week_Delta"], "$State_Week_Delta_Prev", "$Reset_Week"],
["Latch", "$State_Virtual_Total", "$State_Week_Start", "$Reset_Week", 1],
["Multiplexer", ["$State_Month_Delta_Prev", "$O_Month_Delta"], "$State_Month_Delta_Prev", "$Reset_Month"],
["Latch", "$State_Virtual_Total", "$State_Month_Start", "$Reset_Month", 1],
["Multiplexer", ["$State_Quarter_Delta_Prev", "$O_Quarter_Delta"], "$State_Quarter_Delta_Prev", "$Reset_Quarter"],
["Latch", "$State_Virtual_Total", "$State_Quarter_Start", "$Reset_Quarter", 1],
["Multiplexer", ["$State_Year_Delta_Prev", "$O_Year_Delta"], "$State_Year_Delta_Prev", "$Reset_Year"],
["Latch", "$State_Virtual_Total", "$State_Year_Start", "$Reset_Year", 1],
["Latch", "$I_Raw_Value", "$State_Last_Raw", "$Lgc_Input_Allowed", 0],
["Multiplexer", ["$Reset_Day", "$Konst_False"], "$Reset_Day", "$Reset_Day"],
["Multiplexer", ["$Reset_Month", "$Konst_False"], "$Reset_Month", "$Reset_Month"],
["Multiplexer", ["$Reset_Year", "$Konst_False"], "$Reset_Year", "$Reset_Year"]
]
}
Viel Erfolg beim Testen!
Beste Grüße,
eib-eg