Seite 3 von 9

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: So Dez 28, 2025 7:24 pm
von CHD
Celsius hat geschrieben: So Dez 28, 2025 5:27 pm Ich fasse es nicht. Ich ärgere mich nun, dass ich beim letzten Usertreffen nicht anwesend war. Wie ich gelesen habe wurde da die wundersame Entstehung mit ki gezeigt.
Das ist wohl so. Geht mir nicht anders, nur war an dem Wochenende leider in NRW der Beginn der Herbstferien und das wäre gesundheitlich gefährlich für mich geworden :shock: . Wenn jetzt April angepeilt wird muss ich auch wieder schauen. 2026 sind in der 14. und 15.KW die Osterferien in NRW. Wir werden sehen.

Aber auf jeden Fall finde ich es super, wie Georg @eib-eg sich hier aktuell engagiert. :bow-yellow: Vielen Dank! Wenn wir deinen Tokenvorrat als Anerkennung deiner Leistung auffüllen dürfen, teile uns gerne deine "Spendenadresse" mit. Die KI ist ja auch nicht für lau und dich kostet es zumindest auch immer etwas Zeit. :handgestures-salute:

Re: Neue Logik Zähler/Verbrauchslogik aus einzelnen Verbrauchsteilen

Verfasst: So Dez 28, 2025 8:38 pm
von CHD
gbglace hat geschrieben: So Dez 28, 2025 3:00 pm An den Ausgängen bekommst dann den korrigierten Zählerstand und eine Menge statistischer Verbrauchswerte (15 minuten / Stunde / tag / Woche /monat / Quartal / Jahr) und das in der jeweiligen aktuellen Periode und der Vorperiode und deren Zählerstände.
Hallo zusammen, hallo Georg und Göran,

ich habe zu dem Baustein noch eine Frage. Göran schreibt hier auch von den Wochen und sogar Quartalswerten. Finde ich optional nicht schlecht und zumindest die Wochenwerte sind auch in dem Baustein von Robosoc zu finden. Den Baustein hatte ich "damals" übernommen und mittlerweile ist dieser ja auch im Logik Kataolg aufgenommen worden.

Frage: Warum wurden die beiden Werte Woche / Vorwoche und in Georgs Baustein zusätzlich Quartal / Vorquartal von der KI nicht übernernommen? Ist das eine bewusste Entscheidung gewesen oder wurden die Werte unbewusst geschlabbert... Könnte man die Werte noch mit aufnehmen, um dem Ziel alles an einem Platz näher zu kommen?

Ergänzung: Und falls andere Personen auch noch die absoluten Werte des Zählerstands nutzen sollten, könnte man die ggf. in dem selben Abstufungen auch noch ergänzen.

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: So Dez 28, 2025 9:58 pm
von eib-eg
ach ja
ab hier ki text
und die logik hat sich speichen lassen
wenn ich das gewusst hätte das noch eine frage im raum ist, dann hätte ich das lifepo4 daly modbus jason nach hinten verschoben aber das funktioniert jetzt auch ;-))
____________________

Hallo zusammen,

hallo Christian ( @CHD ), hallo Rainer (@Celsius), hallo Göran (@gbglace),

Christian, danke für den wertvollen Input! Du hast den Finger genau in die Wunde gelegt. Mein „Lehrling“ (die KI) hat die Wochen- und Quartalswerte im ersten Wurf tatsächlich unterschlagen.

Wir haben das zum Anlass genommen, den Baustein nicht nur zu vervollständigen, sondern ihn direkt auf „Pro-Niveau“ zu heben. Die neue Version 1.11 ist nun maschinell gehärtet (keine Magic Numbers mehr) und enthält alles, was für eine lückenlose Langzeit-Statistik nötig ist.

Der folgende Text wurde von der KI erstellt und von mir auf dem „Testwolf“ (V4.8 IP4) erfolgreich validiert und gespeichert.

TEIL 1: Katalog-Dokumentation (Technischer Standard V1.11)

1. Titel
Universal-Zähler-Statistik PRO (Tag / Woche / Monat / Quartal / Jahr)

2. Untertitel
Die „All-in-One“-Lösung für Energie- und Mengenzähler mit integrierter Perioden-Historie.

3. Zusatztext für das Verständnis (Die "Magie")
Dieser Baustein ist die konsequente Weiterentwicklung für das professionelle Energiemanagement.

Universal-Input: Er verarbeitet Absolutwerte (Odometer), Inkremente (Häppchen) und Impulse (S0) über einen Wahlschalter.

Christian-Edition: Auf Wunsch aus der Community wurden Wochen- und Quartalswerte sowie die historischen Zählerstände zu Beginn jeder Periode ergänzt.

Präzisions-Logik: Alle Resets folgen der „3-Sekunden-Regel“ (23:59:57 Uhr), um eine perfekte Darstellung in Grafana-Balkendiagrammen ohne Datums-Versatz zu garantieren.

4. Kern-Module

Triggered & Comparator: Für die saubere Input-Erkennung und Reset-Prüfung.

CalcFormula: Für die mathematisch präzise Akkumulation und Differenzbildung.

Cron: Hochgenaue Taktung der fünf verschiedenen Zeitperioden.

Limiter: Zur fehlerfreien Identifikation von Quartals- und Jahresenden.

5. Kern-Operation
Die Logik normalisiert jeden Eingang auf einen internen „virtuellen Gesamtzähler“. Von diesem Wert ausgehend werden durch Subtraktion der jeweils gespeicherten Perioden-Startwerte die Deltas für alle Zeiträume (Tag bis Jahr) berechnet.

6. Beschreibung Kern-Eingänge
NameTypTriggerBeschreibung
ZählerwertFloataRohwert vom Bus (Zählerstand, Delta oder Impuls).
Eingangs-ModusIntu0=Absolut, 1=Inkrement (Häppchen), 2=Impuls.
Impuls-FaktorFloatuWertigkeit pro Impuls (nur Modus 2, z.B. 0.1 für 100Wh).
Korrektur-OffsetFloatuManueller Startwert zur Synchronisation mit dem echten Zähler.
7. Beschreibung Kern-Ausgänge (Auszug)
NameTypSende-VerhaltenBeschreibung
GesamtzählerstandFloatctDer fortlaufende, virtuelle Gesamtzählerstand.
Verbrauch [Periode]FloatctAktueller Verbrauch für Tag, Woche, Monat, Quartal, Jahr.
Verbrauch [Vorper.]FloatcAbgeschlossener Endwert der letzten Periode (z.B. Gestern).
Zählerstand [P.] StartFloatcDer absolute Zählerstand zu Beginn der jeweiligen Periode.
8. Hinweise

Härtung: Version 1.11 eliminiert alle „Magic Numbers“ im Code und ist somit voll kompatibel mit strengen Parser-Einstellungen.

Startwerte: Die Ausgänge „Zählerstand [Periode] Start“ ermöglichen eine einfache Plausibilitätsprüfung der berechneten Deltas.

TEIL 2: Die „Erklärbär“-Dokumentation (Vollversion)

Was ist neu für Christian und die Community?
Wir haben die Logik zum „digitalen Archiv“ ausgebaut.

Woche & Quartal: Du siehst jetzt nicht nur, was heute oder diesen Monat passiert ist, sondern hast auch die Woche und das Quartal (wichtig für Heizperioden) im Blick.

Das Gedächtnis (Startwerte): Die Logik sagt dir jetzt: „Heute Morgen um 0:00 Uhr stand der Zähler bei genau 12.345,6 kWh“. Das macht sie für jeden Zeitraum. So kannst du in der Visu immer sehen, von welchem Wert die Logik eigentlich ausgeht.

Keine Doppelzählung: Die Logik ist jetzt so schlau, dass sie genau unterscheidet, ob ein neuer Wert vom Zähler kommt oder ob nur die Uhrzeit (Mitternacht) einen Rechenlauf ausgelöst hat. Es wird nichts doppelt addiert.

Wie nutze ich die historischen Werte?
Die Ausgänge „Zählerstand Tag/Woche/Monat... Start“ sind ideal, um sie in Grafana als Textfeld anzuzeigen oder um in der Visu eine Tabelle zu bauen: „Stand am 1. des Monats: XXX kWh“.

TEIL 3: Der Code (V1.11 - Monolith)

Hier ist der vollständige, speicherbare Code für den Timberwolf Logik-Editor:

code
JSON
download
content_copy
expand_less
{
"_Meta": {
"Description": "Universal-Zähler-Statistik PRO (Vollversion)",
"Version": "1.11",
"Author": "gbglace, eib-eg, CHD & AI",
"Last_Update": "2025-12-28",
"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"],
["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 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 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"],
["Zählerstand Tag Start", "Stand bei Mitternacht", "$State_Day_Start", "c"],
["Zählerstand Woche Start", "Stand bei Wochenbeginn", "$State_Week_Start", "c"],
["Zählerstand Monat Start", "Stand bei Monatsbeginn", "$State_Month_Start", "c"],
["Zählerstand Quartal Start", "Stand bei Quartalsbeginn", "$State_Quarter_Start", "c"],
["Zählerstand Jahr Start", "Stand bei Jahresbeginn", "$State_Year_Start", "c"]
],
"Level": [
["$I_Raw_Value", "float", 0.0],
["$I_Input_Mode", "integer", 0],
["$I_Pulse_Factor", "float", 1.0],
["$I_Offset", "float", 0.0],
["$O_Total_Counter", "float", 0.0],
["$State_Virtual_Total", "float", 0.0],
["$State_Last_Raw", "float", 0.0],
["$Lgc_New_Input", "bool", false],
["$Lgc_Delta_Calculated", "float", 0.0],
["$Lgc_Delta_Final", "float", 0.0],
["$Lgc_Reset_Detected", "bool", false],
["$Lgc_Mode_Abs_Delta", "float", 0.0],
["$Lgc_Mode_Pulse_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_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_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_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"],
["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", "$Lgc_Is_Min_59", "$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", "$Lgc_Reset_Detected", "$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_New_Input"],
["CalcFormula", ["$State_Virtual_Total", "$Lgc_Delta_Final"], "$State_Virtual_Total", "$F_Add"],
["CalcFormula", ["$State_Virtual_Total", "$I_Offset"], "$O_Total_Counter", "$F_Add"],
["CalcFormula", ["$O_Total_Counter", "$State_Day_Start"], "$O_Day_Delta", "$F_Sub"],
["CalcFormula", ["$O_Total_Counter", "$State_Week_Start"], "$O_Week_Delta", "$F_Sub"],
["CalcFormula", ["$O_Total_Counter", "$State_Month_Start"], "$O_Month_Delta", "$F_Sub"],
["CalcFormula", ["$O_Total_Counter", "$State_Quarter_Start"], "$O_Quarter_Delta", "$F_Sub"],
["CalcFormula", ["$O_Total_Counter", "$State_Year_Start"], "$O_Year_Delta", "$F_Sub"],
["Multiplexer", ["$State_Day_Delta_Prev", "$O_Day_Delta"], "$State_Day_Delta_Prev", "$Reset_Day"],
["Latch", "$O_Total_Counter", "$State_Day_Start", "$Reset_Day", 1],
["Multiplexer", ["$State_Week_Delta_Prev", "$O_Week_Delta"], "$State_Week_Delta_Prev", "$Reset_Week"],
["Latch", "$O_Total_Counter", "$State_Week_Start", "$Reset_Week", 1],
["Multiplexer", ["$State_Month_Delta_Prev", "$O_Month_Delta"], "$State_Month_Delta_Prev", "$Reset_Month"],
["Latch", "$O_Total_Counter", "$State_Month_Start", "$Reset_Month", 1],
["Multiplexer", ["$State_Quarter_Delta_Prev", "$O_Quarter_Delta"], "$State_Quarter_Delta_Prev", "$Reset_Quarter"],
["Latch", "$O_Total_Counter", "$State_Quarter_Start", "$Reset_Quarter", 1],
["Multiplexer", ["$State_Year_Delta_Prev", "$O_Year_Delta"], "$State_Year_Delta_Prev", "$Reset_Year"],
["Latch", "$O_Total_Counter", "$State_Year_Start", "$Reset_Year", 1],
["Latch", "$I_Raw_Value", "$State_Last_Raw", "$Lgc_New_Input", 0]
]
}

Viel Spaß beim Testen!

Beste Grüße,
eib-eg

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 7:15 am
von gbglace
Und wenn wir schon bei der Vervollständigung sind. 15 Minuten (passend zum Strompreiszyklus und Stunde gibt es mit der DQ und Korrekturwertfunktion auch in dieser Logik hier:

viewtopic.php?t=6089

Mit meinen Tests bin ich da mittlerweile auch durch und verlege dieser Tage alle meine Zähler auf diesen Baustein.

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 2:09 pm
von Celsius
Hallo zusammen

Ich bin schon begeistert über die Leistungsfähigkeit das TWS und bin begeistert, wie schnell eine doch recht komplizierte Logik entstand.

Ich habe den Code 1.11 In den TWS geladen und spiele etwas damit. Dabei kommen sicher noch einige Fehler oder Fehlbedienungen zum Vorschein. Wie kann man damit umgehen? Soll man jeden Fehler posten oder gibt es einen Sammeltopf?
Es ist sicher aufwendig, wenn Georg @eib-eg jedes mal eine Änderung einarbeitet.

Fehler oder Falsche Bedienung:
1. Wenn ich einen Korrekturwert eintrage, dann wird dieser nicht nur im Gesamtzählerstand eingetragen, sondern alle Verbräuche Tag, Woche,...

2. Im Doktormodus sehe ich die Werte in der rechten Zelle (ziele hinzufügen). Aber nach einer Verbindung zur TS und Aufruf Grafana, kommen diese in Grafana nicht an.

Gruß
Rainer

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 2:23 pm
von Celsius
Gemeldeter Fehler 2 tritt nicht mehr auf, nachdem ich alle Brauser Anzeigen gelöscht habe und TWS-App und Grafana neu gestartet habe.
Gruß
Rainer

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 3:22 pm
von gbglace
Welchen Code hast denn nun verwendet? Wie gesagt wenn Du einen fertigen an sich stetigen Zähler stand hast nimm den Baustein aus dem Thread-Link den Titel des Links werde ich Anfang nächsten Jahres sicher anpassen. Dann ist der Jahreswechsel durch und das dann für mich der letzte Test der korrekten Funktion.

In dem verlinkten Baustein wirkt der Korrekturwert immer direkt auf dem Rohwert bevor er dann skaliert wird usw. Daher kann es sich anbieten auch direkt ein externes Objekt damit zu verknüpfen, sollte die Quelle sich mal ändern, dann kann man auch unabhängig des Doktormodus einen neuen Korrekturwert einspielen.
Den harten Parameter zu ändern ist wie ein Klick auf Diskette und dann ist die Historie raus aus dem Baustein.

Wenn also der Zähler gerade frisch gebaut ist dann beeinflusst die dortige Eingabe natürlich alle Verbrauchsangaben der jeweils aktuellen laufenden Periode.

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 4:26 pm
von Celsius
Ich habe den Code (V1.11 - Monolith)

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 5:47 pm
von eib-eg
wie ihr wisst logik hat sich speichern lassen und text von der ki geschrieben

___________________


Hallo zusammen,

hallo Rainer (@Celsius), Christian (@CHD) und Göran (@gbglace),

vielen Dank für euer wertvolles Feedback! Wir haben die Logik noch einmal massiv überarbeitet und präsentiere euch heute die Universal-Zähler-Statistik PRO+ (Version 1.21).

Diese Version löst nicht nur das „Offset-Problem“ von Rainer (der Korrekturwert verfälscht jetzt nicht mehr die Statistik), sondern bietet auch die von Christian und Göran angeregten Intervalle für 15 Minuten, Stunden, Wochen und Quartale.

Bevor wir zum Code kommen, möchte ich euch ein paar Insider-Tipps zur Arbeit mit dem Timberwolf Logik-Editor geben, die so in keinem Handbuch stehen und die visuelle Kraft des Wolfs zeigen.

Insider-Tipp: Die „VISUALIZE“-Funktion (Der Röntgenblick)

Viele wissen es nicht :whistle: , aber der Timberwolf hat ein :dance: extrem mächtiges grafisches Werkzeug :dance: „unter der Haube“ :dance: . Sobald ihr eine Logik gespeichert habt und den Doktormodus aktiviert, erscheint am oberen Rand der Logik-Zelle ein kleiner Reiter namens „VISUALIZE“ (siehe Bild 1 und 2).

Bild

Bild

Bild

Was bringt euch das?

Automatischer Schaltplan: Wenn ihr darauf klickt, generiert der Wolf aus dem JSON-Code sofort ein grafisches Flussbild (Bild 3). Das sieht aus wie Node-RED und hilft enorm dabei, den „Weg der Daten“ zu verstehen.

Individuelles Layout: Ihr könnt die einzelnen Blöcke und Verknüpfungen in diesem Fenster mit der Maus so verschieben, wie ihr es am besten versteht.

Speicher-Funktion: Wenn ihr das Layout verschiebt und die Logik speichert, merkt sich der Wolf diese Anordnung! Beim nächsten Öffnen sieht euer „Schaltplan“ genau so aus, wie ihr ihn hinterlassen habt.

Fehlersuche: Man sieht sofort, ob eine Linie (ein Datenfluss) falsch abbiegt. In unserer PRO+ Logik sieht man dort sehr schön, wie der Korrektur-Offset erst ganz am Ende dazukommt und die Verbräuche unberührt lässt.

TEIL 1: Katalog-Dokumentation (Technischer Standard V1.21)

1. Titel
Universal-Zähler-Statistik PRO+ (15m / 1h / Tag / Woche / Monat / Quartal / Jahr)

2. Untertitel
Hochauflösende Zähler-Auswertung mit entkoppeltem Korrektur-Offset und 7-facher Perioden-Statistik.

3. Zusatztext für das Verständnis (Die "Magie")
Die Version 1.21 ist das „Schweizer Taschenmesser“ für alle Zählertypen:

Offset-Entkopplung: Der Korrektur-Eingang dient nur der Synchronisation des Gesamtzählers. Er hat keinen Einfluss auf die Verbrauchs-Deltas.

7 Zeiträume: Volle Statistik von der 15-Minuten-Echtzeitüberwachung bis zum Jahreswert.

Universal-Input: Verarbeitet Absolutwerte, Inkremente (Häppchen) und Impulse über einen Wahlschalter.

4. Kern-Module
Triggered, Cron (3-Sekunden-Regel), CalcFormula (mathematische Trennung), Multiplexer & Latch (Kaskadenspeicher).

5. Beschreibung Kern-Eingänge

Zählerwert: Rohdaten vom Bus.

Eingangs-Modus: 0=Absolut (Odometer), 1=Inkrement (Häppchen), 2=Impuls (S0).

Korrektur-Offset: Abgleich des Gesamtzählers (beeinflusst die Statistik NICHT).

TEIL 2: Die „Erklärbär“-Anleitung (V1.21)

Warum ist das jetzt die „PRO+“ Version?
Stell dir vor, du korrigierst an deinem Auto den Kilometerstand von 10.000 auf 50.000, weil ein neuer Tacho reinkam.

Früher: Die Logik hätte gedacht, du bist heute 40.000 km gefahren.

Heute (V1.21): Die Logik ist schlauer. Sie merkt sich: „Der Tacho zeigt jetzt mehr an, aber mein Tageszähler bleibt davon unberührt.“

Zusätzlich haben wir für die „Strompreis-Jäger“ die 15-Minuten-Werte eingebaut. Damit siehst du genau, wie viel Energie du in jedem Viertelstunden-Slot (passend zu Tibber/Awattar) verbraucht hast.

TEIL 3: Der Code (V1.21 - Monolith)

Hier ist der vollständige, maschinell gehärtete Code für euren Editor:

code
JSON
download
content_copy
expand_less
/**===========================================================
Universal-Zähler-Statistik PRO+ (15m/1h/Tag/Woche/Monat/Quartal/Jahr)
Härtung V1.21: Offset-Entkopplung & 15m/1h Intervalle.
Basiert auf gbglace, eib-eg, CHD, Celsius & AI.
============================================================*/
{
"_Meta": {
"Description": "Universal-Zähler-Statistik PRO+ (Vollversion)",
"Version": "1.21",
"Author": "gbglace, eib-eg, CHD, Celsius & 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"],
["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", "Abgeschlossener Wert der letzten 15 Min", "$State_15Min_Delta_Prev", "c"],
["Verbrauch Letzte Stunde", "Abgeschlossener Wert 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"]
],
"Level": [
["$I_Raw_Value", "float", 0.0],
["$I_Input_Mode", "integer", 0],
["$I_Pulse_Factor", "float", 1.0],
["$I_Offset", "float", 0.0],
["$O_Total_Counter", "float", 0.0],
["$State_Virtual_Total", "float", 0.0],
["$State_Last_Raw", "float", 0.0],
["$Lgc_New_Input", "bool", false],
["$Lgc_Delta_Calculated", "float", 0.0],
["$Lgc_Delta_Final", "float", 0.0],
["$Lgc_Reset_Detected", "bool", false],
["$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"],
["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", "$Lgc_Reset_Detected", "$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_New_Input"],
["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_New_Input", 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

Re: [V4.8 IP4] Verbrauchszähler aus kleinen Einzelverbräuchen

Verfasst: Mo Dez 29, 2025 6:15 pm
von StefanW
Hi Georg,

richtig stark.

@ALL: Bitte Rückmeldung, wenn Ihr das jeweils ordentlich getestet habt, weil das würden wir dann gerne in den Logik Katalog aufnehmen.

lg

Stefan