NEWS
Pendelzugsteuerung mit Lichtschranke
-
Hallo Zusammen,
ich habe ein Projekt in dem ich eine vorhandene Pendelzugsteuerung so ergänzen möchte, dass sie zu definierten Zeiten losfährt und auch wieder anhält. Aktuell muss man das Teil per Hand starten und auch wieder stoppen.
Der Zug hat zwei Haltepunkte. Das Problem an der Sache ist, dass der Zug an einem bestimmten Haltepunkt angehalten werden muss, damit die Steuerung beim nächsten Start weiß, wo der Zug sich befindet. Ich nutze einen ESP mit einem Relais und einer Lichtschranke um mein Projekt umzusetzen. Ziel ist es, dass zu einer bestimmten Zeit der Zug gestartet wir und dann nach einem gewissen Zeitraum die Lichtschanke "scharf geschaltet" wird und wartet, bis der Zug einfährt und dann über das Relais, die Stromzufuhr unterbricht. Am nächsten Tag fängt zu einer bestimmten Zeit das ganze wieder von vorne an. Ich habe mir hierfür auch schon versucht ein Script zusammenzubauen. Das der Zug zu einer bestimmten Zeit losfährt bekomme ich hin. Jedoch stürzt dann bei mit immer die Javascript Instanz ab. Ich denke das hängt irgendwie mit dem Delay zusammen. Es gibt bestimmt auch einen schöneren Lösungsansatz als an der Stelle einfach so lange zu warten. Kann mir hier jemand vielleicht unter die Arme greifen? Ich komme so nicht mehr weiter.Hier noch ein Bild des Blockly Scripts und der Code:
var schedule1; schedule1 = schedule('{"time":{"exactTime":true,"start":"22:47"},"period":{"days":1}}', async function () { try { require("request")('http://192.168.178.88/control?cmd=gpio,14,1').on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } }); await wait(10000); while (!(getState("mqtt.0.Pendelautomatik.Lichtschranke.State").val == 1)) { try { require("request")('http://192.168.178.88/control?cmd=gpio,14,0').on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); } }
Gruß
André -
@andre_k sagte: stürzt dann bei mit immer die Javascript Instanz ab.
"wiederhole bis" erzeugt eine Endlosschleife, die Ursache für den Absturz ist.
Wenn auf die Änderung des Datenpunktes reagiert werden soll, verwende einen Trigger dafür.
-
Danke für den Hinweis. Das Problem ist allerdings, dass der Trigger ja nicht auf die Eingabe wartet, oder? Ich habe in dem Beispiel nach dem Cron eine Wartezeit von 10 Sekunden. Nach dieser Zeit muss das Script solange "warten", bis die Lichtschranke den Wert 1 zurückgibt also sprich der Zug auf seinem Ausgangspunkt steht. Während der Wartezeit dürfen die Werte, welche die Lichtschranke ausgibt nicht verwertet werden.
-
@andre_k sagte: Während der Wartezeit dürfen die Werte, welche die Lichtschranke ausgibt nicht verwertet werden.
Also eine Freigabe erst nach 10 s?
Die Lichtschranke gibt die Werte 0 und 1 aus? Dann genügt der Trigger "ist größer als letztes".
-
Perfekt. Es hat funktioniert. Vielen Dank!