Angeregt durch diese Diskussion hier: viewtopic.php?f=26&t=3772 habe ich einen Logikbaustein geschrieben der Folgendes machen soll (in V1 nicht ausgiebig getestet)
Ein beliebiger, kontinuierlicher Verbrauchszähler lieftert den einzigen Inputwert.
Es gibt diverse Ausgänge, die zu unterscheidlichen Zeiten geschrieben werden:
Grundsätzlich gibt es 4 Perioden
- Tageswerte (gemessen von 23:59:59 des Vortages bis 23:59:59 des aktuellen Tages)
- Wochenwerte (gemessen von und bis 23:59:59 von zwei aufeinanderfolgenden Samstagen)
- Monatswerte (gemessen jeweils zwischen 23:59:59 der letzten Tage zweier aufeinanderfolgender Monate, wobei bei Februar immer nur der 28 genommen wird. In Schaltjahren zählt der 29 daher in diesem Baustein in V1 zum März!)
- Jahreswerte (gemessen jeweils zwischen 23:59:59 des 31.12. zweier aufeinanderfolgender Monate)
- Aktueller Verbrauch = Verbrauch seit Start der Periode bis JETZT (wird immer geschrieben, wenn sich der Zählereingang ändert)
- Verbrauch der letzten abgeschlossenen Periode (wird immer nur geschrieben, wenn eine Periode abgeschlossen wird, also um 23:59:59 des Enddatums der Periode, so wird der Wert beispielsweise immer noch Periodengerecht in eine Zeitreihe geschrieben).
- Zählerstand zum Ende der letzten Periode (wird auch nur zum Ende der Periode geschrieben, wie B. )
für längere Perioden entsprechend später.
Code: Alles auswählen
/**
* Zähler Universalbaustein V1
* Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
*/
{
"Input":[
["Zähler","Kontinuierlicher Zähler","$Counter","A"]
],
"Output":[
["Zähler Tag","Zählerstand zu Beginn des aktuellen Tages","$End_D","X"],
["Zähler Woche","Zählerstand zu Beginn der aktuellen Woche","$End_W","X"],
["Zähler Monat","Zählerstand zu Beginn des aktuellen Monats","$End_M","X"],
["Zähler Jahr","Zählerstand zu Beginn des aktuellen Jahres","$End_Y","X"],
["Verbrauch VorTag","Verbrauch des letzten Tages","$Consumption_PrevD","X"],
["Verbrauch VorWoche","Verbrauch der letzten Woche","$Consumption_PrevW","X"],
["Verbrauch VorMonat","Verbrauch des letzten Monats","$Consumption_PrevM","X"],
["Verbrauch VorJahr","Verbrauch des letzten Jahres","$Consumption_PrevY","X"],
["Verbrauch Aktueller Tag","Verbrauch des aktuellen Tages","$Consumption_CurrD","C"],
["Verbrauch Aktuelle Woche","Verbrauch der aktuellen Woche","$Consumption_CurrW","C"],
["Verbrauch Aktueller Monat","Verbrauch des aktuellen Monats","$Consumption_CurrM","C"],
["Verbrauch Aktuelles Jahr","Verbrauch des aktuellen Jahres","$Consumption_CurrY","C"]
],
"Level":[
["$Counter","float",0.0],
["$End_D","float",0.0],
["$End_W","float",0.0],
["$End_M","float",0.0],
["$End_Y","float",0.0],
["$Consumption_PrevD","float",0.0],
["$Consumption_PrevW","float",0.0],
["$Consumption_PrevM","float",0.0],
["$Consumption_PrevY","float",0.0],
["$Consumption_CurrD","float",0.0],
["$Consumption_CurrW","float",0.0],
["$Consumption_CurrM","float",0.0],
["$Consumption_CurrY","float",0.0],
["$SendCond_D","bool",false],
["$SendCond_W","bool",false],
["$SendCond_M","bool",false],
["$SendCond_M1","bool",false],
["$SendCond_M2","bool",false],
["$SendCond_M3","bool",false],
["$SendCond_Y","bool",false],
["$Cron_D","string","59 59 23 * * *"],
["$Cron_W","string","59 59 23 * * 6"],
["$Cron_M1","string","59 59 23 31 1,3,5,7,8,10,12 *"],
["$Cron_M2","string","59 59 23 30 4,6,9,11 *"],
["$Cron_M3","string","59 59 23 28 2 *"],
["$Cron_Y","string","59 59 23 31 12 *"],
["$Formula","string","X2>0?X1-X2:0"],
["$Gate","bool",true]
],
"Module":[
//Tageswerte schreiben
["CalcFormula",["$Counter","$End_D"], "$Consumption_CurrD", "$Formula"],
["Comparator" , "$End_D" , "$Gate" , 0],
["Cron","$Gate","$SendCond_D",0,"$Cron_D"],
["Latch","$Counter","$End_D","$SendCond_D",1],
["Latch","$Consumption_CurrD","$Consumption_PrevD","$SendCond_D",1],
["SendExplicit","$SendCond_D","$End_D",0],
["SendExplicit","$SendCond_D","$Consumption_PrevD",0],
//Wochenwerte schreiben
["CalcFormula",["$Counter","$End_W"], "$Consumption_CurrW", "$Formula"],
["Comparator" , "$End_W" , "$Gate" , 0],
["Cron","$Gate","$SendCond_W",0,"$Cron_W"],
["Latch","$Counter","$End_W","$SendCond_W",1],
["Latch","$Consumption_CurrW","$Consumption_PrevW","$SendCond_W",1],
["SendExplicit","$SendCond_W","$End_W",0],
["SendExplicit","$SendCond_W","$Consumption_PrevW",0],
//Monatswerte schreiben
["CalcFormula",["$Counter","$End_M"], "$Consumption_CurrM", "$Formula"],
["Comparator" , "$End_M" , "$Gate" , 0],
["Cron","$Gate","$SendCond_M1",0,"$Cron_M1"],
["Cron","$Gate","$SendCond_M2",0,"$Cron_M2"],
["Cron","$Gate","$SendCond_M3",0,"$Cron_M3"],
["Or",["$SendCond_M1","$SendCond_M2","$SendCond_M3"],"$SendCond_M"],
["Latch","$Counter","$End_M","$SendCond_M",1],
["Latch","$Consumption_CurrM","$Consumption_PrevM","$SendCond_M",1],
["SendExplicit","$SendCond_M","$End_M",0],
["SendExplicit","$SendCond_M","$Consumption_PrevM",0],
//Jahreswerte schreiben
["CalcFormula",["$Counter","$End_Y"], "$Consumption_CurrY", "$Formula"],
["Comparator" , "$End_Y" , "$Gate" , 0],
["Cron","$Gate","$SendCond_Y",0,"$Cron_Y"],
["Latch","$Counter","$End_Y","$SendCond_Y",1],
["Latch","$Consumption_CurrY","$Consumption_PrevY","$SendCond_Y",1],
["SendExplicit","$SendCond_Y","$End_Y",0],
["SendExplicit","$SendCond_Y","$Consumption_PrevY",0]
]
}
Bei den ersten 8 Ausgängen kann man das Sendeverhalten nicht einstellen, dass ist korrekt so und liegt daran, dass das Schreiben dieser Werte zum Beschreiben von Zeitreihen erzwungen werden.
