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

[TOP TIPP] Automatische Bewässerungssteuerung

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

Ersteller
MiniMaxV2
Reactions:
Beiträge: 274
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#71

Beitrag von MiniMaxV2 »

Moin Robert,
irgendwie hat es bei mir noch nicht klick gemacht. Mal mein Verständnis eurer Anforderung sind 2 Faktoren (F1 und F2). F1 soll greifen wenn die Sequenz getriggert wird. F2 wenn ein Kreis im Auto-Modus gestartet wurde. Manuell ein Kreis umgeht jegliches Timing. Korrekt?

Das lässt sich doch abbilden so wie es ist. Der Sequenzer gibt im Standby F2 aus. Wird ein Kreis im Auto-Mode getriggert, gilt T*F2. Wird jetzt der Sequenzer getriggert, gibt er F1 aus und startet die Kreise - das ist doch euer gewünschtes Verhalten.
Um es nun noch komplizierter zu machen, bring ich noch die (Derzeit theoretische) Anforderung ein, dass wenn die Sequenz manuell gestartet wurde F3 gelten soll. (ich starte gerne mal die Sequenz händisch, wenn ich noch nicht täglich wässern will automatisch).

Damit sind auch die Aufgaben der Module klar abgegrenzt (SOLID und so ;) ) - CircuitControl kümmert sich nur um die Kreissteuerung nach den Eingabewerten. Der Sequenzer übernimmt die Zeitanpassung und Sequenzsteuerung. SystemControl übernimmt die Pumpensteuerung und Überwachung. Ok nimmt man es ganz streng, müsste man die Zeitanpassung und Aggregierung raus nehmen aus dem Sequenzer und in einen IrrigationController überfphren, der dann den Sequenzer steuert. Vielleicht sollte man das eh machen um die Zeitgeschichten übersichtlich zu halten..

Btw: Deine Visu sieht sehr übersichtlich aus - gefällt mir :handgestures-thumbupright: Da werde ich bestimmt mal abschauen :whistle:
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

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

#72

Beitrag von Robert_Mini »

MiniMaxV2 hat geschrieben: Do Mai 12, 2022 7:32 pm ... Mal mein Verständnis eurer Anforderung sind 2 Faktoren (F1 und F2). F1 soll greifen wenn die Sequenz getriggert wird. F2 wenn ein Kreis im Auto-Modus gestartet wurde. Manuell ein Kreis umgeht jegliches Timing. Korrekt?
Nicht ganz.
Es gibt 3 Fälle (bei mir und bei dir :D ):
- Sequenz wird durch die Bewässerungsautomatik gestartet => Globaler Faktor Automatik, F1
- Sequenz wird manuell gestartet => Globaler Faktor Manuell, F2
- Bewässerungskreis wird einzeln gestartet: ebenfalls Globaler Faktor, F2

Natürlich könnte man (konsequenterweise) auch einen F3 ergänzen, kann man aber auch über die Dauer auf der Visu verstellen, wenn man will...

Für mich ist beides OK; ich würde im Fall 3 Faktoren eben den Multitrigger von der Visu auf F2 und F3 verbinden...

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

ztjuu
Reactions:
Beiträge: 86
Registriert: Sa Mär 07, 2020 8:49 am
Wohnort: Bleiberg-Nötsch (Kärnten)
Hat sich bedankt: 78 Mal
Danksagung erhalten: 69 Mal

#73

Beitrag von ztjuu »

;) Hi

Momentan steuere ich Man die Automatiksequenz. sollte diese irgendwann auch über Regensensor, Bodenfeuchte und Wettervorhersage automatisch gehen finde ich 2 Faktoren F1, F2 super.
Startet man einen Kreis Einzeln passt doch der F2 für Manuell
und bei Dauer Ein/Aus brauch ich den Faktor sowieso nicht.

Ich bin da ganz bei der Überlegung von Robert. Man sollte es nicht übertreiben ;)
TWS 950Q ID:424 VPN: aktiviert Reboot: (OK)
EFH-Neubau: KNX, 1-Wire, DALI, VPN, CV & in Zukunft Multiroom Sound mit raspberry pi, Ekey-Zugang, ModBus TCP & RTU, MQTT

Ersteller
MiniMaxV2
Reactions:
Beiträge: 274
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#74

Beitrag von MiniMaxV2 »

Moin ihr beiden,
Der F3 war ja erstmal nur eine theoretische Überlegung - da F3=F2 gilt, reicht F2 alleine. Ich kann sehr gut mit 2 Faktoren am Sequenzer leben und finde das ausreichend.

Aber ich bleibe auch dabei, dass der Sequenzer die Faktoren umstellt ;) Das gehört nicht in den CircuitControl :)
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

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

#75

Beitrag von Robert_Mini »

MiniMaxV2 hat geschrieben: Fr Mai 13, 2022 7:24 pm Aber ich bleibe auch dabei, dass der Sequenzer die Faktoren umstellt ;) Das gehört nicht in den CircuitControl :)
Wobei es dann nicht konsequent ist, dass der Factor am Circuit verwendet wird, wenn nur der einzelne Kreis getriggert wird… Der letzte Wert von Sequenzer kann dann ja alt sein. Undefined ob man/auto!

EDIT: Ich hab mir das grad nochmal angesehen. War etwas verwirrt, da ich bisher dachte, dass mit Trigger Start manuell gestartet wird, ohne dass ein Timer läuft. Das stimmt so aber nocht.

Damit fände ich folgendes optimal:
- 2x Factor als Eingang am Circuit
- Factor1 für TriggerAutomatic 1+2 (Könnte auch "Factor Automatic" heißen)
- Factor2 für TriggerStart 1+2 (Könnte dann Factor Manual" heißen)

Damit kann der Sequencer wie derzeit bei mir umgesetzt den FactorAutoSeq/ManSequence an Factor 1 senden, dh die Sequenz läuft mit den richtigen Faktor, je nachdem welche Sequenz gestartet wurde (Sequencer kontrolliert korrekterweise den Faktor).
Auf Factor2 des circuit kann man dann konst=1 legen oder Factor Manuell (der auch am Sequenzer anliegt) oder eben einen unabhängigen Wert.

Das fände ich perfekt!

Robert
Zuletzt geändert von Robert_Mini am Sa Mai 14, 2022 9:46 am, insgesamt 2-mal geändert.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

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

#76

Beitrag von Robert_Mini »

Hallo Hans Martin!

Habe gerade mein Posting oben nochmal editiert, nachdem ich das nochmal im LE analysiert habe. Damit kommen wir nun dem Ziel schon sehr nahe.

Nachstehend noch die Umsetzung des Sequenzers (mit der Verteilung des GlobalFactors).

lg
Robert

Code: Alles auswählen

/**
 * File: Irrigation_Sequencer.twl V1.0 BETA 1
 * Logic for Garden irrigation. This module is the sequencer which controls an automatic run of all circuits 
 * Author: Hans Martin
 * 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": [
        ["Start Cycle", "(RISING) Trigger to start an automatic irrigation cycle", "$TriggerInpStart", "c"],
        ["Start Man Cycle", "(RISING) Trigger to start an automatic irrigation cycle", "$TriggerInpMan", "c"],
        ["Stop", "(RISING) Trigger to stop an automatic irrigation cycle", "$TriggerInpStop", "c"],
        ["Next Circuit", "(RISING) Trigger to step to next circuit", "$TriggerInpNext", "a"],
        ["Number of Circuits", "(0-20) Configure the number of active circuits", "$NumberOfSteps", "u"],
        ["Global Factor Auto", "Global Factor in  Automatic Mode", "$GlobalFactorAuto", "u"],
        ["Global Factor Man", "Global Factor in  Manual Mode", "$GlobalFactorMan", "u"],
        ["Inhibit", "", "$VAR<Inhibit?>", "c"]
  ],
  "Output": [
        ["Global Factor", "Global scale factor for circuit time", "$GlobalFactorOut", "c"],
        ["Sequencer Active", "(0/1) State of sequencer", "$SequencerActive", "c"],
        ["Sequencer Number", "(R+) Current active output number", "$SequencerNumber", "c"],
        ["Stop", "(RISING) Signal to stop all irrigation circuits", "$SequencerStop", "c"],

        // repeat as many time as desired irrigation circuits
        ["Channel 1", "(0/1) Trigger for irrigation circuit", "$Circuit_1_?", "c"],
        ["Channel 2", "(0/1) Trigger for irrigation circuit", "$Circuit_2_?", "c"],
        ["Channel 3", "(0/1) Trigger for irrigation circuit", "$Circuit_3_?", "c"],
        ["Channel 4", "(0/1) Trigger for irrigation circuit", "$Circuit_4_?", "c"],
        ["Channel 5", "(0/1) Trigger for irrigation circuit", "$Circuit_5_?", "c"],
        ["Channel 6", "(0/1) Trigger for irrigation circuit", "$Circuit_6_?", "c"],
        ["Channel 7", "(0/1) Trigger for irrigation circuit", "$Circuit_7_?", "c"],
        ["Channel 8", "(0/1) Trigger for irrigation circuit", "$Circuit_8_?", "c"],
        ["Channel 9", "(0/1) Trigger for irrigation circuit", "$Circuit_9_?", "c"],
        ["Channel 10", "(0/1) Trigger for irrigation circuit", "$Circuit_10_?", "c"],
        ["Channel 11", "(0/1) Trigger for irrigation circuit", "$Circuit_11_?", "c"],
        ["Channel 12", "(0/1) Trigger for irrigation circuit", "$Circuit_12_?", "c"],
        ["Channel 13", "(0/1) Trigger for irrigation circuit", "$Circuit_13_?", "c"],
        ["Channel 14", "(0/1) Trigger for irrigation circuit", "$Circuit_14_?", "c"],
        ["Channel 15", "(0/1) Trigger for irrigation circuit", "$Circuit_15_?", "c"],
        ["Channel 16", "(0/1) Trigger for irrigation circuit", "$Circuit_16_?", "c"],
        ["Channel 17", "(0/1) Trigger for irrigation circuit", "$Circuit_17_?", "c"],
        ["Channel 18", "(0/1) Trigger for irrigation circuit", "$Circuit_18_?", "c"],
        ["Channel 19", "(0/1) Trigger for irrigation circuit", "$Circuit_19_?", "c"],
        ["Channel 20", "(0/1) Trigger for irrigation circuit", "$Circuit_20_?", "c"]
  ],
  "Level": [
        // Inputs
        ["$VAR<Inhibit?>","bool",false],
        ["$TriggerInpStart","bool",false],
        ["$TriggerInpMan","bool",false],
        ["$TriggerInpStop","bool",false],
        ["$TriggerInpNext","bool",false],
// *MR*: 
        ["$GlobalFactorAuto","float",1.0],
        ["$GlobalFactorMan","float",1.0],
        ["$GlobalFactorOut","float",1.0],
        // Outputs
        ["$SequencerActive","bool",false], // also used as internal state
        ["$SequencerNumber","int",0],
        ["$SequencerStop","bool",false],

        // Channels
        // Configure number of circuits
        ["$NumberOfSteps","int",0],
        // channel outs - repeat as many irrigation circuits are configured above
        ["$Circuit_1_","bool",false],
        ["$Circuit_2_","bool",false],
        ["$Circuit_3_","bool",false],
        ["$Circuit_4_","bool",false],
        ["$Circuit_5_","bool",false],
        ["$Circuit_6_","bool",false],
        ["$Circuit_7_","bool",false],
        ["$Circuit_8_","bool",false],
        ["$Circuit_9_","bool",false],
        ["$Circuit_10_","bool",false],
        ["$Circuit_11_","bool",false],
        ["$Circuit_12_","bool",false],
        ["$Circuit_13_","bool",false],
        ["$Circuit_14_","bool",false],
        ["$Circuit_15_","bool",false],
        ["$Circuit_16_","bool",false],
        ["$Circuit_17_","bool",false],
        ["$Circuit_18_","bool",false],
        ["$Circuit_19_","bool",false],
        ["$Circuit_20_","bool",false],

        // Constants
        ["$Konst1", "int", 1],
        ["$KonstFalse", "bool", false],
        ["$KonstTrue", "bool", true],
        ["$Timeout", "int", 10],
        
        // Internals
        ["$CurrentStep","int",0],
        ["$NextStep","int",0],
        ["$StepOverflow", "bool", false],
        ["$ResetSystem", "bool", false],
        ["$Inhibit","bool",false],
        ["$TriggerInpStartRisingAuto","bool",false],
        ["$TriggerInpStartRisingMan","bool",false],
        ["$TriggerInpStartRising","bool",false],
        ["$TriggerInpStopRising","bool",false],
        ["$TriggerInpNextRising","bool",false],
// *RM*: 
        ["$TriggerSaveStartMode","bool",false],
        ["$TriggerNext","bool",false],
        ["$TriggerNextMan","bool",false],
        ["$TriggerNextAuto","bool",false]
  ],
  "Module": [
        ["Or", ["$VAR<Inhibit?>"], "$Inhibit"],
        
        // calculate rising edges
        ["And", ["$TriggerInpStart", "-$SequencerActive"], "$TriggerInpStartRisingAuto"],
        ["And", ["$TriggerInpMan", "-$SequencerActive"], "$TriggerInpStartRisingMan"],
        ["Or", ["$TriggerInpStartRisingAuto", "$TriggerInpStartRisingMan"], "$TriggerInpStartRising"],
        ["And", ["$TriggerInpStop", "$SequencerActive"], "$TriggerInpStopRising"],
        ["And", ["$TriggerInpNext", "$SequencerActive"], "$TriggerInpNextRising"],

// *MR*: Save  manual trigger 
        ["Latch", "$KonstTrue", "$TriggerSaveStartMode", "$TriggerInpStartRisingMan", 1],
        ["Latch", "$KonstFalse", "$TriggerSaveStartMode", "$TriggerInpStartRisingAuto", 1],

        // calculate start of system
        ["Multiplexer", ["$SequencerActive", "$Konst1"], "$SequencerActive", "$TriggerInpStartRising"],

        // calculate next step
        ["Polynomial", "$Konst1", "$NextStep", ["$CurrentStep", "$Konst1"] ], // ++$CurrentStep
        ["Comparator", "$NextStep", "$StepOverflow", "$NumberOfSteps"],
        ["Multiplexer", ["$NextStep", 0], "$NextStep", "$StepOverflow"],

        // set next step when next was triggered or system was started
        ["Multiplexer", ["$CurrentStep","$NextStep"], "$CurrentStep", "$TriggerInpNextRising"],
        ["Multiplexer", ["$CurrentStep","$NextStep"], "$CurrentStep", "$TriggerInpStartRising"],

// *MR*: Map factor to output
        ["Or", ["$TriggerInpNextRising", "$TriggerInpStartRising"], "$TriggerNext"],
        ["And", ["$TriggerNext", "$TriggerSaveStartMode"], "$TriggerNextMan"],
        ["And", ["$TriggerNext", "-$TriggerSaveStartMode"], "$TriggerNextAuto"],
        ["Latch", "$GlobalFactorAuto", "$GlobalFactorOut", "$TriggerNextAuto", 0],
        ["Latch", "$GlobalFactorMan", "$GlobalFactorOut", "$TriggerNextMan", 0],
        
        // reset current step when stop was issued or inhibit was set
        ["Or", ["$TriggerInpStopRising", "$Inhibit"], "$ResetSystem"],
        ["And", ["$ResetSystem", "$SequencerActive"], "$ResetSystem"], // only reset when system runs
        ["Multiplexer", ["$CurrentStep",0], "$CurrentStep", "$ResetSystem"],

        // start timer to reset stop output later on
        ["Monoflop","$ResetSystem", 0, 0,"$Timeout",2],
        
        // write common outputs
        ["Polynomial", 0, "$SequencerNumber", ["$CurrentStep"]],
        ["Multiplexer", [0, "$Konst1"], "$SequencerStop", "$ResetSystem"],
        ["Multiplexer", [0, "$SequencerActive"], "$SequencerActive", "$CurrentStep"],

        // Reset Inputs
        ["Latch", "$KonstFalse", "$TriggerInpStart", "$KonstTrue", 0],
        ["Latch", "$KonstFalse", "$TriggerInpMan", "$KonstTrue", 0],
        ["Latch", "$KonstFalse", "$TriggerInpStop", "$KonstTrue", 0],
        ["Latch", "$KonstFalse", "$TriggerInpNext", "$KonstTrue", 0],

        // write circuit outputs
        // copy as many circuit exists. Put a zero in front of $Konst1 for each new step. 
        ["Multiplexer", [0, "$Konst1", 0], "$Circuit_1_", "$CurrentStep"],
        ["Multiplexer", [0, 0, "$Konst1", 0], "$Circuit_2_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, "$Konst1", 0], "$Circuit_3_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, "$Konst1", 0], "$Circuit_4_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_5_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_6_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_7_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_8_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_9_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_10_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_11_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_12_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_13_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_14_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_15_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_16_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_17_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_18_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_19_", "$CurrentStep"],
        ["Multiplexer", [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "$Konst1", 0], "$Circuit_20_", "$CurrentStep"]

  ]
}
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Timberwolf Server 2500 / #117 (VPN offen + reboot nach Rückfrage) / zusätzlich: 3500M/#935, 3500L/#1297

Ersteller
MiniMaxV2
Reactions:
Beiträge: 274
Registriert: Sa Jan 12, 2019 8:41 pm
Wohnort: Bremen
Hat sich bedankt: 342 Mal
Danksagung erhalten: 151 Mal

#77

Beitrag von MiniMaxV2 »

Moin Robert,
Irgendwie kommt hier grade alles durcheinander. Ich glaube wir meinen die ganze Zeit das Selbe..
In deinem 2. Beitrag sieht es so aus, wie ich es meine - 1 Ausgangsfaktor des Sequenzers der auf jeden Circuit geht. Circuit hat nur einen Faktor Eingang der immer beim Triggert genutzt wird. Er weiß ja net ob Automatik oder Hans-Automatik getriggert wurde. Bei Manuell am Circuit geht eh alles auf Dauer-ein.

Allerdings verwirrt mich dein 1. Beitrag - da sprichst du von 2 Faktoren am Circuit ;)

Am Sequenzer gibt's 2 Faktoren. Im Standby oder Trigger Man Cycle kommt Faktor Man durch, bei Trigger Auto kommt Faktor Auto durch. Und bei Change an Faktor Man wird der Wert direkt durchgereicht an Global Faktor der Kreise. Damit ist da auch nix undefined.
Zuletzt geändert von MiniMaxV2 am Sa Mai 14, 2022 11:41 pm, insgesamt 1-mal geändert.
LG
Hans Martin
timberwolf413 (950Q) - VPN offen - reboot erlaubt / timberwolf610 (950Q) - VPN offen - reboot erlaubt

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

#78

Beitrag von Robert_Mini »

Hallo Martin!

Bevor die Verwirrung noch größer wird, habe ich mir nun nochmal den Code angesehen und deine Beiträge nochmals genau gelesen.

Ein Teil der Verwirrung kommt von diesem Code im Circuit:

Code: Alles auswählen

// take over current circuit time
        ["Or", ["$TriggerInpStartIn1","$TriggerInpStartIn2"], "$TriggerNoFactor"],
        ["And", ["$TriggerNoFactor","-$State"], "$TriggerNoFactor"],
        ["Latch","$AutoTime_sec","$AutoTime","$TriggerNoFactor",1],
Der circuit setzt beim Manuellen Start ein das Autotime (ohne Factor), es wird aber kein Timer gestartet (hatte ich übersehen).

Die 2. Verwirrung kommt daher, dass du den Sequencer offensichtlich anders angedacht hast, als ich oben gepostet habe (ich weiß nicht ob du da schon was erweitert hast oder nur ein Konzept im Kopf hast).
1) Ich habe den Sequencer (oben gepostet) so umgesetzt, dass nur beim Starten der Sequenz der Factor Auto/Man gesendet wird.
2) Du schreibst, dass immer Man durchgereicht wird und nur beim Starten der Auto-Sequenz der Factor Auto durchgereicht wird.

Wenn du/wir das so wie in 2) umsetzen, dann sind wir mit der Diskussion fertig, denn ich finde das auch einfacher und weniger komplex. Jeglicher 2. Faktor am Circuit kann dann entfallen.

Wie gehen wir weiter vor:
1) Wie ist denn der Stand bez. Sequenzer bei dir? Hast du schon was bez. Faktor Man/Auto eingebaut oder soll ich das vorsehen?
2) Gibt es schon einen Ansatz für eine Berechnung der gesamten Sequenzzeit - ein paar Gedanken im folgenden Posting.

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

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

#79

Beitrag von Robert_Mini »

Hallo Hans-Martin

zu 2) sehe ich noch ein paar Probleme:
- Ein Summenbaustein reicht an dieser Stelle alleine nicht, denn wenn die Sequenz läuft, ist das Time_Remaining des jeweiligen Kreises ja ein aktueller Wert.
- Auch fehlt im Moment beim Circuit die Funktion, dass bei Inhibit das Time_Remaining = 0 gesetzt wird. Ist aber einfach zu ergänzen.

Ich würde das wie folgt umsetzen (kann das gerne vorbereiten):
- Circuit Erweiterung => bei Sperre Restzeit = 0
- Summenbaustein, der on change die Summe aller Restzeiten berechnet = Gesamtzeit
- Das Ergebnis als Eingang in den Sequencer
- Bei Sequencer Start wird der letzte Wert der Gesamtzeit gespeichert und eine Stoppuhr gestartet
- Daraus ergibt sich sich die abgelaufene Zeit der Sequenz und es lässt sich die Restzeit berechnen

Nachteil: Wenn während der laufenden Sequenz Kreise gesperrt oder die Dauer verstellt wird, stimmt die Restzeit nicht. Eine laufende Berechnung der Restzeit der verbleibenden Kreise geht zwar theoretisch, wäre aber nur umsetzbar, wenn man alle Restzeiten auch in den Sequenzer rückführt (=unübersichtlich) oder einen Baustein baut, der wiederum zumindest Dauer und Sperre(n) jedes Kreises empfängt und dazu noch den Sequenzstatus.

Ich denke die genaue Variante steht nicht dafür, wie denkst du? Reicht der vereinfachte Ansatz?

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

Cepheus73
Reactions:
Beiträge: 167
Registriert: Sa Aug 11, 2018 11:36 pm
Wohnort: München
Hat sich bedankt: 394 Mal
Danksagung erhalten: 108 Mal

#80

Beitrag von Cepheus73 »

Hallo Hans-Martin und Robert,

erstmal vielen Dank für die super Vorarbeit und das Veröffentlichen der Bausteine und die rege Diskussion!

Ich hab zur Zeit eine sehr rudimentäre TWL am Laufen (feste Zeitpunkte, Automatik nur durch Deaktivieren der Logik abschaltbar - dann auch kein manuelles Triggering, keine Wetter- bzw. Feuchtigkeitsabhängigkeit).

Das muss dringend verbessert werden, deswegen möchte ich gerne auch die Bausteine von Euch einsetzen.

Bei mir gibt es folgende Randbedingungen:
* Kreise sollen in unterschiedlichen Zyklen laufen, also z.B.
Rasen: Di + Fr
Beete: jeden zweiten Tag
Hochbeete: jeden Tag
* Manche Kreise dürfen parallel laufen, andere nur exklusiv wegen Förderrate Pumpe, also
Rasen: exklusiv
Beete: parallel - um Pumpenlaufzeit und damit Energie zu sparen
* Einzelne Kreise abschaltbar, z.B. Balkonkästen
* Automatische Startzeit zentral, z.B. 6 Uhr morgens
* Manuelles Triggern individueller Kreise über Visu möglich

Wenn ich das richtig sehe, dann muss ich folgendes machen:
1. Control, Sequencer einmal instantiieren
2. Circuit Control pro Kreis
3. Circuit Control Inhibit nur an freigegebenen Tagen false, sonst true (über getrennten Logikbaustein pro Kreis)
4. Parallele Kreise über denselben Ausgang des Sequencers ansteuern
5. Länger laufender Kreis triggert zum Schluss "Next Circuit" auf Sequencer

Bei 3. schaut es mir aber danach aus, dass der Kreis dann bei Inhibit=true auch nicht mehr manuell direkt getriggert werden kann, weil dann Cancel==true ist?
Vielleicht wurde das hier im Strang auch schon erwähnt, muss ich nochmal genau nachlesen über alle 8 Seiten ;-)

@Robert_Mini wegen deines Visu-Ausschnitts - gefällt mir gut, sowas hatte ich mir auch vorgestellt - wäre es möglich, dass du die entsprechende Teilkonfig postest? Dann könnte ich evtl. besser verstehen, wie die Zusammenhänge zwischen Ein- und Ausgängen der Logiken und der Visu sind.
TW 2600 #178 - VPN offen, Zugriff jederzeit
EFH, KNX, 1-Wire, DALI, Wiregate,
CometVisu (TW Docker-Container), Mobotix T25, Logiken für Licht- und Rolladensteuerung
1-Wire-Ventilaktoren + Logiken für Gartenbewässerung
Antworten

Zurück zu „Zusätzliche Logikbausteine“