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

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

CHD
Beiträge: 400
Registriert: Fr Dez 14, 2018 9:32 pm
Wohnort: Gronau
Hat sich bedankt: 1192 Mal
Danksagung erhalten: 239 Mal

#21

Beitrag 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:
Viele Grüße, Christian

Timberwolf Server 2600 #200 ULTRA842 / PBM #778 / PBM #779 / PBM #780 / Reboot erlaubt / VPN offen
Timberwolf Server 3500XL #1715 ULTRA323 / Reboot erlaubt / VPN offen

CHD
Beiträge: 400
Registriert: Fr Dez 14, 2018 9:32 pm
Wohnort: Gronau
Hat sich bedankt: 1192 Mal
Danksagung erhalten: 239 Mal

#22

Beitrag 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.
Zuletzt geändert von CHD am So Dez 28, 2025 8:52 pm, insgesamt 1-mal geändert.
Viele Grüße, Christian

Timberwolf Server 2600 #200 ULTRA842 / PBM #778 / PBM #779 / PBM #780 / Reboot erlaubt / VPN offen
Timberwolf Server 3500XL #1715 ULTRA323 / Reboot erlaubt / VPN offen

eib-eg
Beiträge: 854
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1695 Mal
Danksagung erhalten: 630 Mal

#23

Beitrag 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
TW 2600_99 seit 1.1.2018 / VPN zu

gbglace
Beiträge: 4283
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1497 Mal
Danksagung erhalten: 2032 Mal

#24

Beitrag 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.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
Celsius
Beiträge: 78
Registriert: So Jan 08, 2023 4:55 pm
Hat sich bedankt: 54 Mal
Danksagung erhalten: 17 Mal

#25

Beitrag 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
TWS 3500xl ID:1063 VPN offen, Reboot erlaubt, ETS 5.7.7, Gira HS4.12, PV Anlage 10kW, Kaco WR, PV Speicher 25kWh

Ersteller
Celsius
Beiträge: 78
Registriert: So Jan 08, 2023 4:55 pm
Hat sich bedankt: 54 Mal
Danksagung erhalten: 17 Mal

#26

Beitrag 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
TWS 3500xl ID:1063 VPN offen, Reboot erlaubt, ETS 5.7.7, Gira HS4.12, PV Anlage 10kW, Kaco WR, PV Speicher 25kWh

gbglace
Beiträge: 4283
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1497 Mal
Danksagung erhalten: 2032 Mal

#27

Beitrag 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.
Grüße Göran
#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#PV 43,2 kWh Akku; 3x VE MP2 5000; 6,7 kWp > 18 Panele an 4x HM1500 + 1 HM800 WR; Open-DTU

Ersteller
Celsius
Beiträge: 78
Registriert: So Jan 08, 2023 4:55 pm
Hat sich bedankt: 54 Mal
Danksagung erhalten: 17 Mal

#28

Beitrag von Celsius »

Ich habe den Code (V1.11 - Monolith)
TWS 3500xl ID:1063 VPN offen, Reboot erlaubt, ETS 5.7.7, Gira HS4.12, PV Anlage 10kW, Kaco WR, PV Speicher 25kWh

eib-eg
Beiträge: 854
Registriert: Fr Sep 14, 2018 5:03 pm
Hat sich bedankt: 1695 Mal
Danksagung erhalten: 630 Mal

#29

Beitrag 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
TW 2600_99 seit 1.1.2018 / VPN zu

StefanW
Elaborated Networks
Elaborated Networks
Beiträge: 11064
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 5449 Mal
Danksagung erhalten: 9348 Mal
Kontaktdaten:

#30

Beitrag 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
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.
Antworten

Zurück zu „Zusätzliche Logikbausteine“