NEWS
PWM Steuerung mit Fade
-
@Aphofis sagte:
Pule Wellenverlauf
von 30% mit Wave_Up in 2,5 sek hoch auf 100% dann mit Wave_Stop sofort runter auf 30% dann wieder von vorne.Du hast bei Pulse_Wave_Stop eine Zeit (30 s) eingegeben. Bedeutet das: 30 s lang auf 30 %, bevor es wieder von vorne los geht ?
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
Pule Wellenverlauf
von 30% mit Wave_Up in 2,5 sek hoch auf 100% dann mit Wave_Stop sofort runter auf 30% dann wieder von vorne.Du hast bei Pulse_Wave_Stop eine Zeit (30 s) eingegeben. Bedeutet das: 30 s lang auf 30 %, bevor es wieder von vorne los geht ?
Nein 2,5 Sek hoch auf 100% dann sofort runter auf 30% dort gehts dann sofort wieder hoch auf 100% eigntl kann dem entsprechend Wave_Stop raus
-
@Aphofis sagte:
Nein 2,5 Sek hoch auf 100% dann sofort runter auf 30% dort gehts dann sofort wieder hoch
Also ein Sägezahn-Verlauf.
@Aphofis sagte in PWM Steuerung mit Fade:
eigntl kann dem entsprechend Wave_Stop raus
Ja, das hatte mich irritiert.
-
@paul53
Ja so zu sagen! Hatte doch mal die Bilder von meiner aufstellung geschickt!
Da sieht man den verlauf der Wellengänge
-
@Aphofis sagte:
Da sieht man den verlauf der Wellengänge
Genau wegen dieser Diskrepanz zu einer Zeit Pulse_Wave_Stop habe ich gefragt.
-
@paul53
Ja ist nur so erstellt gewesen! Also weg löschen im Kopf -
-
@paul53
Du bist ja wahnsinnig
Das mal Geil!
Ich hoffe das alles so klappt
Woran erkenne ich welche welche Steuerung ist? -
@Aphofis sagte:
Woran erkenne ich welche welche Steuerung ist?
Am Datenpunkt "Tunze Wellen Auswahl", mit dem die entsprechende Wellenform aktiviert wird.
"states": "0:Aus;1:Sequenzial;2:Intervall;3:Pulse;4:Wellengang",
Vergleichskriterium ist die Zahl, die der Wellenform zugeordnet ist.
-
@paul53
Ne das meine ich nicht ich meine in der steuerung welcher bereich für welchen wellengang zuständig ist!
Sequenzial kann ich ja noch finden aber die anderen -
@Aphofis
Das sieht man an der Zahl mit der verglichen wird:
1 - Sequenzial
2 - Intervall
3 - Pulse
4 (sonst) - Wellengang -
@paul53
so recht will die steuerung noch nicht laufen und irgendwie muss wenn nichts gemacht werden soll der Datenpunkt auf 0 gestellt werden da ich die steuerung nihct per datenpunkt anwählen kann wenn das programm erstmal läuft.
Es kommt noch eine schwierigkeit dazu
wellengang müssen Pumpe 1 und 2 gegenläufig zu pumpe 3 und 4 sein! Sonst entsteht kein Wellengang.
Ich hoffe es stimmt alles!
Ich weiß nicht wi du sowas erdenken kannst! Das nicht menschlich !!!var delta, inc, Intervall, dec, wellen, hold, spannung, holdcnt; /** * Beschreibe diese Funktion … */ function Welle() { delta = inc; Intervall = setInterval(function () { if (Math.abs(delta) < 70) { spannung = (typeof spannung == 'number' ? spannung : 0) + delta; } else if (spannung >= 100) { spannung = 30; } else { spannung = 100; } setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); setState("sonoff.0.Aqua_Wave.Channel2"/*Aqua_Wave_Pump_2*/, spannung); setState("sonoff.0.Aqua_Wave.Channel3"/*Aqua_Wave_Pump_3*/, spannung); setState("sonoff.0.Aqua_Wave.Channel4"/*Aqua_Wave_Pump_4*/, spannung); if (spannung >= 100) { delta = dec; } if (spannung <= 30) { if (hold) { if (holdcnt <= 0) { holdcnt = hold; delta = 0; } else { holdcnt = (typeof holdcnt == 'number' ? holdcnt : 0) + -1; } } else { holdcnt = 0; } if (holdcnt <= 0) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); if (wellen) { Welle(); } } } }, 25); } on({id: 'Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 1) { // Sequenzial inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up").val; dec = -1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down").val; hold = 0; } else if ((obj.state ? obj.state.val : "") == 2) { // Intervall inc = 70; dec = -1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Down").val; hold = 40 * getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Hold").val; } else if ((obj.state ? obj.state.val : "") == 3) { // Pulse inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Pulse_Wave_Up").val; dec = -70; hold = 0; } else { inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Pulse_Wave_Up").val; dec = -70; hold = 40 * getState("Aqua_Control.0.Tunze_Steuerung.Pulse_Wave_Stop").val; } if ((obj.state ? obj.state.val : "") > 0) { wellen = true; spannung = 30; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); setState("sonoff.0.Aqua_Wave.Channel2"/*Aqua_Wave_Pump_2*/, spannung); setState("sonoff.0.Aqua_Wave.Channel3"/*Aqua_Wave_Pump_3*/, spannung); setState("sonoff.0.Aqua_Wave.Channel4"/*Aqua_Wave_Pump_4*/, spannung); Welle(); } else { wellen = false; } }); schedule("51 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 1); }); schedule("52 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 2); }); schedule("53 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 3); }); schedule("54 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 4); });
-
Zeit Steuerung war nur zum testen.
Toll wäre natürlich wenn man mehrere Datenpunkte hätte wo man die Zeiten eintragen könnte aber das sprengt glaube ich den Rahmen. -
@Aphofis sagte:
muss wenn nichts gemacht werden soll der Datenpunkt auf 0 gestellt werden
Richtig, wie ich weiter oben schon geschrieben habe, ist eine Pause (Zustand "Aus" = 0) von mind. 5 s erforderlich, weil erst mit "Aus" der Zyklus (Ende von "hold") sauber beendet wird.
-
@paul53
Ok das ist mir nicht aufgefallen.
Nur denke ich die Steuerung bleibt irgendwo hängen bzw ist der Pi ausgelastet.
Ich denke schon drüber nach einen Pi 4 zu kaufen da muss ich aber erstmal sehen ob die iobroker integration einfach geht oder ob das der selbe mist ist wie mit dem Tinker Board -
@Aphofis sagte:
Nur denke ich die Steuerung bleibt irgendwo hängen bzw ist der Pi ausgelastet.
Ohne die Pause (Aus) laufen mehrere Intervalle parallel, was den RasPi überfordert. Damit das nicht passiert, füge vor dem Aufruf von Welle (links unten) ein stop zyklische Ausführung Intervall ein (s. Bild).
@Aphofis sagte in PWM Steuerung mit Fade:
einen Pi 4 zu kaufen
Bevor Du soweit gehst, verdopple die Zyklusdauer auf 50 ms. Dann müssen allerdings auch die Faktoren für inc und dec von 1.75 auf 3.5 verdoppelt und die Faktoren für hold von 40 auf 20 halbiert werden.
-
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
wellengang müssen Pumpe 1 und 2 gegenläufig zu pumpe 3 und 4 sein!
Meinst Du so ?
Das sieht gut aus, wenn 2 und 2 pumpen im Wellengang gegeneinander arbeiten dann ja
Sprich wenn Pumpe 1 und 2 die 0,56 sek welle starten müssen pumpe 2 und 3 die welle 1,16 sek später starten mit 0,56 sek -
@Aphofis sagte:
Sprich wenn Pumpe 1 und 2 die 0,56 sek welle starten müssen pumpe 2 und 3 die welle 1,16 sek später starten mit 0,56 sek
Das ist aber etwas anderes: Jeweils 2 Pumpen wechseln sich periodisch ab.
-
sind denn die Datenpunkte richtig gesetzt ???
var delta, inc, Intervall, wellen, dec, spannung, hold, holdcnt; /** * Beschreibe diese Funktion … */ function Welle() { delta = inc; Intervall = setInterval(function () { if (Math.abs(delta) < 70) { spannung = (typeof spannung == 'number' ? spannung : 0) + delta; } else if (spannung >= 100) { spannung = 30; } else { spannung = 100; } setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); setState("sonoff.0.Aqua_Wave.Channel2"/*Aqua_Wave_Pump_2*/, spannung); setState("sonoff.0.Aqua_Wave.Channel3"/*Aqua_Wave_Pump_3*/, spannung); setState("sonoff.0.Aqua_Wave.Channel4"/*Aqua_Wave_Pump_4*/, spannung); if (spannung >= 100) { delta = dec; } if (spannung <= 30) { if (hold) { if (holdcnt <= 0) { holdcnt = hold; delta = 0; } else { holdcnt = (typeof holdcnt == 'number' ? holdcnt : 0) + -1; } } else { holdcnt = 0; } if (holdcnt <= 0) { (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})(); if (wellen) { Welle(); } } } }, 25); } on({id: 'Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if ((obj.state ? obj.state.val : "") == 1) { // Sequenzial inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up").val; dec = -1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down").val; hold = 0; } else if ((obj.state ? obj.state.val : "") == 2) { // Intervall inc = 70; dec = -1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Down").val; hold = 40 * getState("Aqua_Control.0.Tunze_Steuerung.Intervall_Wave_Hold").val; } else if ((obj.state ? obj.state.val : "") == 3) { // Pulse inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Pulse_Wave_Up").val; dec = -70; hold = 0; } else { // Wellengang inc = 1.75 / getState("Aqua_Control.0.Tunze_Steuerung.Wellengang_Wave_Up").val; dec = -70; hold = 40 * getState("Aqua_Control.0.Tunze_Steuerung.Wellengang_Wave_Hold").val; } if ((obj.state ? obj.state.val : "") > 0) { wellen = true; spannung = 30; setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung); setState("sonoff.0.Aqua_Wave.Channel2"/*Aqua_Wave_Pump_2*/, spannung); setState("sonoff.0.Aqua_Wave.Channel3"/*Aqua_Wave_Pump_3*/, spannung); setState("sonoff.0.Aqua_Wave.Channel4"/*Aqua_Wave_Pump_4*/, spannung); Welle(); } else { wellen = false; } }); schedule("51 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 1); }); schedule("52 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 2); }); schedule("53 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 3); }); schedule("54 23 * * *", function () { setState("Aqua_Control.0.Tunze_Steuerung.Tunze_Wellen_Auswahl"/*Tunze Wellen Auswahl*/, 4); });