NEWS
Wert erhöhen und Vergleichen beim Schaltzustand True
-
Hallo Blocky Spezialistzen,
ich habe ein kleines Problem.
Mein Script läuft aber ich würde es gerne verstehen.
Habe eine Steckdose die ich in zwei Zyklen steuern will.
- Wenn einmal gedrückt dann erster Bereich
- Wenn dann wieder aus und wieder angeschaltet wird der zweite Bereich.
Soweit geht das auch aber ich versteh den Sinn mit den Zyklen zählen nicht.
Nach meinem Verständnis nach habe ich es so aufgebaut er starte und erhört um 1 wenn es dann 1 ist startet er mit dem oberen Bereich und erhöht im Anschluss um wieder +1 . Dann schalte ich die Steckdose aus und wieder ein und der Zyklus wird auf +1 somit auf 3 erhöht.Ich bekomme es aber nur mit Zyklen 7 in den 2. Bereich da er mir nach 2 nochmals 3 und 4 anlegt und vor dem nächsten dann 5 und 6 erhöht und ich verstehe nicht woher er diese Erhöhung bekommt.
Kann mir das jemand erklären oder den Fehler aufzeigen?
Sorry für den vielen Text.
Gruss Stefan
Log:
javascript.0 14:19:43.759 info script.js.Eigene.0.Steckdosen.Druckluft: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
javascript.0 14:19:53.854 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen1
javascript.0 14:19:53.855 info script.js.Eigene.0.Steckdosen.Druckluft: Strom an: Zyklen: 1
javascript.0 14:19:53.855 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen: 2
javascript.0 14:19:53.959 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen3
javascript.0 14:19:54.771 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen4
javascript.0 14:20:04.992 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen5
javascript.0 14:20:05.046 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen6
javascript.0 14:20:05.807 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen7
javascript.0 14:20:05.807 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen = 3 sind Zyklen: 7
javascript.0 14:20:25.809 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen wurden wieder nach 20sek. resettet: Zyklen: 0
javascript.0 14:20:34.454 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen1
javascript.0 14:20:34.455 info script.js.Eigene.0.Steckdosen.Druckluft: Strom an: Zyklen: 1
javascript.0 14:20:34.455 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen: 2
javascript.0 14:20:34.524 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen3
javascript.0 14:20:34.769 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen4
javascript.0 14:20:46.616 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen5
javascript.0 14:20:46.678 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen6
javascript.0 14:20:46.800 info script.js.Eigene.0.Steckdosen.Druckluft: Status Zyklen7
javascript.0 14:20:46.801 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen = 3 sind Zyklen: 7
javascript.0 14:21:06.801 info script.js.Eigene.0.Steckdosen.Druckluft: Zyklen wurden wieder nach 20sek. resettet: Zyklen: 0
javascript.0 14:21:42.018 info Stopping script script.js.Eigene.0.Steckdosen.Druckluft -
Fangen wir mal vorne an:
- du triggerst auf "ist wahr", sprich jede Aktualisierung des Status der Steckdose (mit oder ohne Schalten) löst einen Impuls aus. Besser ist hier eine Triggerung auf "ist grösser als vorher", dann wird der Trigger nur aktiv wenn der Status von falsch auf wahr wechselt (beim einschalten)
- Du hast 2 Sekunden Pause eingebaut. Das führt nicht dazu das dann für 2 Sekunden der Trigger nicht aktiv ist. Es wird nur die Ausführung des Codes des gerade aktivierten Triggers verzögert. Den Sinn verstehe ich nur bedingt - es kann sein das du damit das eigentliche Tastern (ein+ausschalten) erkennen willst.
- dann erhöhst du bei jedem Trigger deinen Zykluszähler um 1, unabhängig wie die Steckdose da gerade geschaltet ist (sprich wenn sie an geblieben ist oder wenn sie wieder ausgeschaltet wurde)
- Danach wird es seltsam:
-- wenn die Steckdose noch an ist, und der Zykluszähler auf 1 steht erhöhst du den ein 2. mal und Meldest "Strom an", sprich danach bist du immer bei Zykluszähler 2.
-- wenn die Steckdose noch an ist und der Zykluszähler auf 7 steht setzt du den Zykluszähler zurück. An der Stelle kommen die 7 Zyklen ins Spiel. Die "Einfache" Lösung wäre also die Zahl 7 im Vergleich von 7 auf 3 zu reduzieren und den rest so zu lassen. Das halte ich aber für Unsinnig. Ich würde das ganze daher so umbauen (dann macht es auch sinn)
Zur Erklärung:
-
die 2 Sek. Pause sind meiner Meinung nach unnötig, da der Trigger ja nur in dem Moment aktiv wird wenn die Steckdose eingeschaltet wird. Wichtig: auch ein kurzes Einschalten der Steckdose geht jetzt in den Status 1. Wenn das verhindert werden soll wird das Skript deutlich komplexer - da sind die 2 Sek. Pause keine stabile Lösung.
-
Die Abfrage ob die Steckdose noch an ist kann aus dem gleichen Grund entfallen.
-
Der Dir wahrscheinlich unbekannte Block "Der Fall Ist", den ich benutzt hab ersetzt das Konstrukt "falls - sonst falls - sonst falls. Er kann immer dann gut eingesetzt werden wenn es darum geht auf unterschiedliche Werte der gleichen Variable zu reagieren.
-
Das ich im Status 1 den Zykluszähler nicht hoch setze liegt einfach daran das dieses ja automatisch bei JEDEM einschalten passiert - der sprung von 1 auf 2 im Status 1 ist also unnötig.
Ich hoffe das hilft.
A.
-
Danke für deine Ausführliche Erklärung, ja der grosse Fehler lag an dem Trigger.
Ich nutze bisher immer aktualisieren oder ändern, ich hatte es so interpretiert das ist wahr, quasi immer auf den Wahr zustand geht aber so habe ich wieder was gelernt, habe mein script nur mal damit umgebaut und den wert 7 wie geplant wieder auf 3 gesetzt und das script läuft gewünscht.deine anderen Bemerkungen und Anregungen sind sehr hilfreich und werde ich in mein grosses Script so einbauen. das kleine lief erstmals auch mit den ich nenn es mal "umwegen".
Die Falls Objekte Version war mir wirklich unbekannt und hilft ungemein, diese kann ich für ein weitere script nutzen wenn ich das optimiere und umbaue werde ich das da auch einbringen.
Danke dir vielmals für deine Gedanken anstösse und wünsche ein schönes Wochenende.
Stefan