UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

Beispiele für Logiken

Alles was sonst irgendwie nirgends rein passt.
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
Antworten

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

Beispiele für Logiken

#1

Beitrag von Robert_Mini »

Advenoni hat geschrieben: Di Jan 21, 2020 8:20 pm @Robert_Mini sind die meisten nur kleine Logiken für Status Fenster für Visu, Auswertung für Anzeige in Haustür und in Garage, Ausschalten von Lichtern und Kompressor wenn ich zu lang nicht in der Werkstatt bin, Betriebsstundenzähler für Lampen wenn die Aktoren keinen haben, schalten der 24V Versorgung (Zentral) je nachdem ob Verbraucher dafür aktiv sind, Auswertung für Erzeugung Solar, Verbrauch Leitungswasser, Regenwasser, Gas (Strom ist nicht nötig, da direkt über Smartmeter von Enertex), Erfassung Niederschlag, Füllstand Zisterne auswerten und zuletzt noch eine Beschattungslogik (dazu werde ich noch mal separat was schreiben).
Fehlt nur noch eine Logik zur Regelung der Temperatur in der Speiß sowie Überwachung der CO2-Werte (wegen Carbonator) in der Speiß. Gibt also noch etwas zu tun.
Wollte den Ursprungsthread nicht kapern, daher habe ich @Advenoni hier zitiert und poste meine Fragen hier weiter.

Darf ich noch neugierig sein, un fragen wie du die Messung von Leitungs- und Regenwasserverbrauch bzw. Niederschlagserfassung umgesetzt hast.
Keine falsche Bescheidenheit bei den Logiken. Auch bzw. vor allem die kleinen Beispiele helfen anderen beim Verständnis, manch große Custom Logik (auch von mir selbst) mag zwar beeindrucken, aber hilft anderen beim Einstieg nur wenig.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Advenoni
Reactions:
Beiträge: 292
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#2

Beitrag von Advenoni »

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:
Bild
Von der neuen Grafik gibt es noch keine Tagesauswertung, da ich da gerade noch einen Fehler gefunden habe :angry-banghead:
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):
Bild


Eine andere mehr oder weniger ganz banale Logik ist meine Logik zum hoch- bzw. herunterfahren der Rolläden am Morgen bzw. am Abend.
Bild
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:
Bild
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
Bild
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
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#3

Beitrag von Robert_Mini »

Super - Danke für die vielen Beispiele!!!

Zum Impulszähler: Ich habe den etwas vorschnell geteilt und das Senden bei jedem Impuls "übersehen".
Inzwischen habe ich den Baustein um eine Einstellmöglichkeit erweitert: man kann nun für den Tageszähler und Wochen/Monats/Jahreszähler ein getrenntes Sendeintervall angeben.

Ich werde ihn demnächst hier im Forum teilen.

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#4

Beitrag von Robert_Mini »

So: gerade eingestellt: viewtopic.php?f=65&t=1641&p=20611#p20611

lg
Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#5

Beitrag von Robert_Mini »

@Advenoni: Wie entstehen eigentlich die schrägen Linien in deinem Diagramm?
Sieht so aus, als ob da ewig kein Wert mehr kommt und dann der Reset den Wert 0 in die Zeitserie setzt.

Wenn ich das sehe, wäre eigentlich ein zyklisches Senden (zB 1x/h) auch sinnvoll, wenn kein Impuls mehr kommt?

lg
Robert

PS: @all: wenn es bei den Logiken Anregungen gibt, bitte nur her damit. Meist hat das Problem ja nicht nur einer...
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Advenoni
Reactions:
Beiträge: 292
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#6

Beitrag von Advenoni »

Hallo Robert,
die schrägen Linien kommen leider daher, dass der Baustein ja nur bei Änderung sendet. Und da wenn es dunkel ist der Ertrag über 15 Minuten immer 0 ist, wird kein neuer Wert gesendet.
Hab daher meine Logik jetzt ein wenig geändert.
Und zwar triggere ich die Logik alle 15 Minuten mittels crone "0 0-59/15 * * * *" und schalte die Ausgänge entsprechend auf "T".
Funktioniert wie es aussieht (mal ne Weile laufen lassen), was nur etwas verwirrend ist, dass die Ausgangsvariablen immer gleich geändert werden, aber wie vorgesehen nur alle 15 Minuten gesendet werden. Ist diese Verhalten bekannt oder evtl. sogar gewünscht?
Hatte eher in der Logik den aktuellen Wert der Variabel gewünscht, und an der Ausgangsvariable dann was was auch wirklich auf dem Bus gesendet wird.
Hier wäre noch der geänderte Code:

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","1 0-59/15 * * * *"],
    ["$StartZeitTag","string","2 5 0 * * *"],
    ["$StartZeitWoche","string","3 5 0 * * 1"],
    ["$StartZeitMonat","string","4 5 0 1 * *"],
    ["$StartZeitJahr","string","5 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","$KonstTrue"],
	["Multiplexer",["$Zaehler15Min","$Konst0"],"$Zaehler15Min","$Reset15Min"],
    ["Multiplexer",["$Reset15Min","$Konst0"],"$Reset15Min","$Reset15Min"],
    // Tag Zurücksetzen
    ["Cron","$KonstTrue","$ResetTag",0,"$StartZeitTag"],
	["Multiplexer",["$ZaehlerTag_sp","$ZaehlerTag"],"$ZaehlerTag_sp","$KonstTrue"],
	["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","$KonstTrue"],
	["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","$KonstTrue"],
	["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","$KonstTrue"],
	["Multiplexer",["$ZaehlerJahr_sp2","$ZaehlerJahr"],"$ZaehlerJahr_sp2","$ResetJahr"],
	["Multiplexer",["$ZaehlerJahr","$Konst0"],"$ZaehlerJahr","$ResetJahr"],
    ["Multiplexer",["$ResetJahr","$Konst0"],"$ResetJahr","$ResetJahr"],	
	// Gesamt
	["Multiplexer",["$ZaehlerGes_sp","$ZaehlerGes"],"$ZaehlerGes_sp","$KonstTrue"],
    //
	// (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","t"],
    ["Tag_15min","Zählerstand Tag 15 Min akt.","$ZaehlerTag2","t"],
    ["Tag_d","Zählerstand Tag täglich akt.","$ZaehlerTag2_sp","c"],
    ["Woche_15min","Zählerstand Woche 15 Min akt.","$ZaehlerWoche2","t"],
    ["Woche_w","Zählerstand Woche wöchentlich akt.","$ZaehlerWoche2_sp","c"],
    ["Monat_15min","Zählerstand Monat 15 Min akt.","$ZaehlerMonat2","t"],
    ["Monat_m","Zählerstand Monat monatlich akt.","$ZaehlerMonat2_sp","c"],
    ["Jahr_15min","Zählerstand Jahr 15 Min akt.","$ZaehlerJahr2","t"],
    ["Jahr_y","Zählerstand Jahr jährlich akt.","$ZaehlerJahr2_sp","c"],
    ["Gesamt","Zählerstand Gesamt","$ZaehlerGes2","t"]
  ],
  "Input": [
    ["Impulssignal","Eingang Impulssignal alternierend 1-0-1-0","$In","c"],
    ["Faktor","Faktor Impulsanzahl => Zählerstand","$Faktor","u"]
  ]
}
/**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. */
Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

Ersteller
Robert_Mini
Reactions:
Beiträge: 3741
Registriert: So Aug 12, 2018 8:44 am
Hat sich bedankt: 1164 Mal
Danksagung erhalten: 2058 Mal

#7

Beitrag von Robert_Mini »

Hallo Martin!

Ich würde dir den Umstieg auf den: viewtopic.php?f=65&t=1641 empfehlen.
Sendet beim Empfang des Wertes aber mit Mindestintervall.
Das Thema zyklisch senden wenn keine Impulse kommen ergänze ich gerne.

Weiterer Vorteil: der kommt demnächst mit in die Bibliothek.

Robert
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297
Antworten

Zurück zu „Allgemeines“