So,
dann geb ich hier meinen Senf dazu
Vorlage für die Logik der Verbrauchserfassung war von
@Robert_Mini Custom-Logik Zählerbaustein aus Impulse-Zählern. Vielen Dank hier nochmals!
Ich ließ die Logik zunächst so für Leitungs-, Regenwasser, Gas und Niederschlag laufen.
Dann habe ich bei mir ja gemerkt, dass zum Teil nach ein paar Tagen die Ausschaltverzögerung einer einfachen UND-Logik nicht mehr ging. Die Ursache hierfür hab ich zusammen mit
@S. Kolbinger die gleichzeitig ablaufenden Timer herausgefunden.
Code: Alles auswählen
["$StartZeitTag","string","0 5 0 * * *"],
["$StartZeitWoche","string","0 5 0 * * 1"],
["$StartZeitMonat","string","0 5 0 1 * *"],
["$StartZeitJahr","string","0 5 0 1 1 *"]
Diese Timer haben wir dann wie folgt geändert:
Code: Alles auswählen
["$StartZeitTag","string","1 5 0 * * *"],
["$StartZeitWoche","string","2 5 0 * * 1"],
["$StartZeitMonat","string","3 5 0 1 * *"],
["$StartZeitJahr","string","4 5 0 1 1 *"]
Das Problem trat dann nicht mehr auf und konnte von Stefan auch nachgestellt werden, es wird also irgendwann einen Fix geben.
Was mir an der Logik nicht so gefiel, war, dass ja alle Zählerwerte, wenn man sie auf dem Bus will bei jedem Impuls gesendet werden.
Ebenso sieht die Grafik des Tagesverbrauchs nicht so toll aus, da sie ja immer den Verbrauch bis gerade eben ausgibt. Und dann wollte ich speziell für die Photovoltaik noch eine Zähler über je 15 Minunten ...
Ich habe bei mir lieber eine Übersicht mit der ich die Tage und Wochen untereinander besser vergleichen kann.
Da aber auch die Aktuallwerte, also aktueller Tages-,Wochen-, Monats- und Jahresverbrauch interessant sind habe ich mir für zwei Ausgaben der Zählwerte entschieden. Um nicht unnötig oft zu aktualisieren gibt die Logik nun die Aktuallwerte alle 15 Minuten aus (sofern sich der Wert ändert) und die anderen Werte dementsprechend einmal am Tag, Woche, usw.
Hier noch eine Grafik der alten Logik in Grafana wo zu sehen sein dürfte was ich meine:
Von der neuen Grafik gibt es noch keine Tagesauswertung, da ich da gerade noch einen Fehler gefunden habe
So, aber hier nun der Code meiner aktuellen Verbrauchserfassung:
Code: Alles auswählen
/**=====================================================================
Zählen von Impulsen und Umrechnung zu Gesamtmenge oder Verbrauch
- Tages/Wochen/Monats/Jahres und Gesamtzähler
======================================================================*/
{
"Level": [
["$In","bool",false],
["$In_Last","bool",false],
["$New","bool",false],
["$Zaehler15Min","integer",0],
["$Zaehler15Min_sp","integer",0],
["$Zaehler15Min2","float",0.0],
["$Zaehler15MinNeu","integer",0],
["$ZaehlerTag","integer",0.0],
["$ZaehlerTag_sp","integer",0.0],
["$ZaehlerTag_sp2","integer",0.0],
["$ZaehlerTag2","float",0.0],
["$ZaehlerTag2_sp","float",0.0],
["$ZaehlerTagNeu","integer",0.0],
["$ZaehlerWoche","integer",0.0],
["$ZaehlerWoche_sp","integer",0.0],
["$ZaehlerWoche_sp2","integer",0.0],
["$ZaehlerWoche2","float",0.0],
["$ZaehlerWoche2_sp","float",0.0],
["$ZaehlerWocheNeu","integer",0.0],
["$ZaehlerMonat","integer",0.0],
["$ZaehlerMonat_sp","integer",0.0],
["$ZaehlerMonat_sp2","integer",0.0],
["$ZaehlerMonat2","float",0.0],
["$ZaehlerMonat2_sp","float",0.0],
["$ZaehlerMonatNeu","integer",0.0],
["$ZaehlerJahr","integer",0.0],
["$ZaehlerJahr_sp","integer",0.0],
["$ZaehlerJahr_sp2","integer",0.0],
["$ZaehlerJahr2","float",0.0],
["$ZaehlerJahr2_sp","float",0.0],
["$ZaehlerJahrNeu","integer",0.0],
["$ZaehlerGes","integer",0.0],
["$ZaehlerGes_sp","integer",0.0],
["$ZaehlerGes2","float",0.0],
["$ZaehlerGesNeu","integer",0.0],
["$Faktor","float",2],
["$Delta","integer",0.0],
["$Konst1","float",1.0],
["$Konst0","float",0.0],
["$KonstTrue","bool",true],
["$Reset15Min","bool",false],
["$ResetTag","bool",false],
["$ResetWoche","bool",false],
["$ResetMonat","bool",false],
["$ResetJahr","bool",false],
["$ResetGesamt","bool",false],
["$StartZeit15Min","string","0 0-59/15 * * * *"],
["$StartZeitTag","string","1 5 0 * * *"],
["$StartZeitWoche","string","2 5 0 * * 1"],
["$StartZeitMonat","string","3 5 0 1 * *"],
["$StartZeitJahr","string","4 5 0 1 1 *"]
],
"Module": [
// Impuls mit altem Wert vergleichen (anderer Trigger?)
["Polynomial","-$Konst1","$Delta",["$In", "$In_Last"]],
["Limiter","$Delta",0,"-$New",["$Konst0","$Konst0"]],
// Anzahl Impuls erhöhen, wenn sich Impuls geändert hat
["Polynomial","$Konst1","$Zaehler15MinNeu",["$Zaehler15Min", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerTagNeu",["$ZaehlerTag", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerWocheNeu",["$ZaehlerWoche", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerMonatNeu",["$ZaehlerMonat", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerJahrNeu",["$ZaehlerJahr", "$Konst1"]],
["Polynomial","$Konst1","$ZaehlerGesNeu",["$ZaehlerGes", "$Konst1"]],
// Nur addieren, wenn Wert "neu" ist.
["Multiplexer",["$Zaehler15Min","$Zaehler15MinNeu"],"$Zaehler15Min","$New"],
["Multiplexer",["$ZaehlerTag","$ZaehlerTagNeu"],"$ZaehlerTag","$New"],
["Multiplexer",["$ZaehlerWoche","$ZaehlerWocheNeu"],"$ZaehlerWoche","$New"],
["Multiplexer",["$ZaehlerMonat","$ZaehlerMonatNeu"],"$ZaehlerMonat","$New"],
["Multiplexer",["$ZaehlerJahr","$ZaehlerJahrNeu"],"$ZaehlerJahr","$New"],
["Multiplexer",["$ZaehlerGes","$ZaehlerGesNeu"],"$ZaehlerGes","$New"],
// 15Min Zurücksetzen
["Cron","$KonstTrue","$Reset15Min",0,"$StartZeit15Min"],
["Multiplexer",["$Zaehler15Min_sp","$Zaehler15Min"],"$Zaehler15Min_sp","$Reset15Min"],
["Multiplexer",["$Zaehler15Min","$Konst0"],"$Zaehler15Min","$Reset15Min"],
// Tag Zurücksetzen
["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
["Multiplexer",["$ZaehlerTag_sp","$ZaehlerTag"],"$ZaehlerTag_sp","$Reset15Min"],
["Multiplexer",["$ZaehlerTag_sp2","$ZaehlerTag"],"$ZaehlerTag_sp2","$ResetTag"],
["Multiplexer",["$ZaehlerTag","$Konst0"],"$ZaehlerTag","$ResetTag"],
["Multiplexer",["$ResetTag","$Konst0"],"$ResetTag","$ResetTag"],
// Woche Zurücksetzen
["Cron","$KonstTrue","$ResetWoche",0,"$StartZeitWoche"],
["Multiplexer",["$ZaehlerWoche_sp","$ZaehlerWoche"],"$ZaehlerWoche_sp","$Reset15Min"],
["Multiplexer",["$ZaehlerWoche_sp2","$ZaehlerWoche"],"$ZaehlerWoche_sp2","$ResetWoche"],
["Multiplexer",["$ZaehlerWoche","$Konst0"],"$ZaehlerWoche","$ResetWoche"],
["Multiplexer",["$ResetWoche","$Konst0"],"$ResetWoche","$ResetWoche"],
// Monat Zurücksetzen
["Cron","$KonstTrue","$ResetMonat",0,"$StartZeitMonat"],
["Multiplexer",["$ZaehlerMonat_sp","$ZaehlerMonat"],"$ZaehlerMonat_sp","$Reset15Min"],
["Multiplexer",["$ZaehlerMonat_sp2","$ZaehlerMonat"],"$ZaehlerMonat_sp2","$ResetMonat"],
["Multiplexer",["$ZaehlerMonat","$Konst0"],"$ZaehlerMonat","$ResetMonat"],
["Multiplexer",["$ResetMonat","$Konst0"],"$ResetMonat","$ResetMonat"],
// Jahr Zurücksetzen
["Cron","$KonstTrue","$ResetJahr",0,"$StartZeitJahr"],
["Multiplexer",["$ZaehlerJahr_sp","$ZaehlerJahr"],"$ZaehlerJahr_sp","$Reset15Min"],
["Multiplexer",["$ZaehlerJahr_sp2","$ZaehlerJahr"],"$ZaehlerJahr_sp2","$ResetJahr"],
["Multiplexer",["$ZaehlerJahr","$Konst0"],"$ZaehlerJahr","$ResetJahr"],
["Multiplexer",["$ResetJahr","$Konst0"],"$ResetJahr","$ResetJahr"],
// Gesamt
["Multiplexer",["$ZaehlerGes_sp","$ZaehlerGes"],"$ZaehlerGes_sp","$Reset15Min"],
["Multiplexer",["$Reset15Min","$Konst0"],"$Reset15Min","$Reset15Min"],
//
// (In_Last = In)
["Polynomial","$Konst1","$In_Last",["$In"]],
// Zahlerstand umrechnen
["Polynomial","$Faktor","$Zaehler15Min2",["$Konst0","$Zaehler15Min_sp"]],
["Polynomial","$Faktor","$ZaehlerTag2",["$Konst0","$ZaehlerTag_sp"]],
["Polynomial","$Faktor","$ZaehlerTag2_sp",["$Konst0","$ZaehlerTag_sp2"]],
["Polynomial","$Faktor","$ZaehlerWoche2",["$Konst0","$ZaehlerWoche_sp"]],
["Polynomial","$Faktor","$ZaehlerWoche2_sp",["$Konst0","$ZaehlerWoche_sp2"]],
["Polynomial","$Faktor","$ZaehlerMonat2",["$Konst0","$ZaehlerMonat_sp"]],
["Polynomial","$Faktor","$ZaehlerMonat2_sp",["$Konst0","$ZaehlerMonat_sp2"]],
["Polynomial","$Faktor","$ZaehlerJahr2",["$Konst0","$ZaehlerJahr_sp"]],
["Polynomial","$Faktor","$ZaehlerJahr2_sp",["$Konst0","$ZaehlerJahr_sp2"]],
["Polynomial","$Faktor","$ZaehlerGes2",["$Konst0","$ZaehlerGes_sp"]]
],
"Output": [
["15Min","Zählerstand 15 Minuten","$Zaehler15Min2","c"],
["Tag_15min","Zählerstand Tag 15 Min akt.","$ZaehlerTag2","c"],
["Tag_d","Zählerstand Tag täglich akt.","$ZaehlerTag2_sp","c"],
["Woche_15min","Zählerstand Woche 15 Min akt.","$ZaehlerWoche2","c"],
["Woche_w","Zählerstand Woche wöchentlich akt.","$ZaehlerWoche2_sp","c"],
["Monat_15min","Zählerstand Monat 15 Min akt.","$ZaehlerMonat2","c"],
["Monat_m","Zählerstand Monat monatlich akt.","$ZaehlerMonat2_sp","c"],
["Jahr_15min","Zählerstand Jahr 15 Min akt.","$ZaehlerJahr2","c"],
["Jahr_y","Zählerstand Jahr jährlich akt.","$ZaehlerJahr2_sp","c"],
["Gesamt","Zählerstand Gesamt","$ZaehlerGes2","c"]
],
"Input": [
["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
["Faktor","Faktor Impulsanzahl => Zählerstand","$Faktor","c"]
]
}
/**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. */
Wenn es läuft sieht das ganze dann so aus (bis auf den Ausgang Tag_d wo der Fehler lag):
Eine andere mehr oder weniger ganz banale Logik ist meine Logik zum hoch- bzw. herunterfahren der Rolläden am Morgen bzw. am Abend.
Code hierfür:
Code: Alles auswählen
{
"Level": [
["$Tag_Nacht","bool",false],
["$Tag_Nacht_sp1","bool",false],
["$Tag_Nacht_sp2","bool",false],
["$Tag_Nacht_S","bool",false],
["$Tag_Nacht_R","bool",false],
["$Tag_Nacht_Wechsel","bool",false],
["$Schwelle","float",0.0],
["$Azimuth","int",0],
["$Azimuth_Grenze","int",180],
["$Min","float",0.0]
],
"Module": [
["Comparator","$Min","$Tag_Nacht_sp1","$Schwelle"],
["Comparator","$Azimuth","$Tag_Nacht_sp2","$Azimuth_Grenze"],
["And",["-$Tag_Nacht_sp1","$Tag_Nacht_sp2"],"$Tag_Nacht_S"],
["And",["$Tag_Nacht_sp1","-$Tag_Nacht_sp2"],"$Tag_Nacht_R"],
["Or",["$Tag_Nacht_S","$Tag_Nacht_R"],"$Tag_Nacht_Wechsel"],
["Latch","$Tag_Nacht_S","$Tag_Nacht","$Tag_Nacht_Wechsel",1]
],
"Input": [
["Azimuth","GA Azimuth","$Azimuth","u"],
["Helligkeit","GA Helligkeit","$Min","u"],
["Schwelle_Tag/Nacht","GA Helligkeit Tag/Nacht","$Schwelle","u"]
],
"Output": [
["Tag/Nacht","GA Tag/Nacht","$Tag_Nacht","c"]
]
}
/**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. */
Hier wird im Endeffekt sobald die Helligkeit über dem Schwellwert ist die Variable Tag_Nacht auf false (=Tag) gesetzt und verhindert, dass solte die Helligkeit erneut sinken der Wert wieder auf true (=Nacht) geschrieben wird. Erst wenn der Azimuth über 180° ist kann ein Helligkeitswert der niedriger als die Schwelle ist die Variabel wieder auf true setzen.
Weitere einfache Logik zum setzen der Fahrsperre der Rollos in der Früh:
Code hierfür:
Code: Alles auswählen
{
"Level": [
["$StartZeit","string","0 0 0 * * *"],
["$StopZeit","string","0 0 6 * * *"],
["$Set","bool",false],
["$Res","bool",false],
["$Stat","int",0],
["$Out","bool",false],
["$KonstFalse","bool",false],
["$VAR<Inhibit?>", "bool", false]
],
"Module": [
["Break",["$VAR<Inhibit?>"] ],
["Cron","-$KonstFalse","$Set",0,"$StartZeit"],
["Cron","-$KonstFalse","$Res",0,"$StopZeit"],
["BinaryMultiplexer",["$Set","$Res"],"$Stat"],
["Multiplexer",["$Out","-$KonstFalse","$KonstFalse"],"$Out","$Stat"]
],
"Input": [
],
"Output": [
["Ein/Aus","Ausgang der Zeitschaltuhr","$Out","c"]
]
}
/**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. */
Funktion:
Variable wird jeden Tag um 0:00 Uhr gesetzt, und um 6:00 wieder rückgesetzt. Ich habe das ganze mal so "kompliziert" ausgeführt, da ich hier noch die Möglichkeit habe das ganze Wochentag abhängig zu gestalten.
Und noch eine Logik für meine Fenster zum anzeigen: 0=Offen, 1=Gekippt, 2=Geschlossen, 3=Störung
Und der Code:
Code: Alles auswählen
{
"Level": [
["$In","int",0],
["$Bit0","bool",false],
["$Bit1","bool",false],
["$Offen","bool",false],
["$Gekippt","bool",false],
["$Geschlossen","bool",false],
["$Stoerung","bool",false],
["$VAR<Inhibit?>", "bool", false]
],
"Module": [
["Break", ["$VAR<Inhibit?>"] ],
["BinaryDemultiplexer", "$In",["$Bit0","$Bit1"] ],
["And",["-$Bit0","-$Bit1"],"$Offen"],
["And",["$Bit0","-$Bit1"],"$Gekippt"],
["And",["-$Bit0","$Bit1"],"$Geschlossen"],
["And",["$Bit0","$Bit1"],"$Stoerung"]
],
"Input": [
["In","Zustandswert Fenster","$In","c"],
["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ]
],
"Output": [
["Offen","Fenster geöffnet","$Offen","c"],
["Gekippt","Fenster gekippt","$Gekippt","c"],
["Geschlossen","Fenster geschlossen","$Geschlossen","c"],
["Störung","Fenster Störung","$Stoerung","c"]
]
}
/**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. */
So, ich glaube das war erst Mal genug. Evtl. kann ja jemand was brauchen
Für die Logik der Beschattung schreibe ich mal noch separat was.
Gruß,
Martin