NEWS
PWM Steuerung mit Fade
-
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); });
-
@paul53 sagte in PWM Steuerung mit Fade:
@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.
Genau! sie müssen einfach gegenläufig arbeiten damit eine Welle entsteht! sind bei mir ca 4-5 cm im Becken nur so am Rande.
-
-
@paul53 sagte in PWM Steuerung mit Fade:
@Aphofis sagte:
sind denn die Datenpunkte richtig gesetzt ???
Ja.
Kannst du mir vielleicht die Zeiten erklären wie die werte zustande kommen wenn ich die Datenpunkte mit sek habe wie wird dann errechnet?
-
aslso wie ist der zusammenhang mit delta und spannung
zB Sequenzial
inc 1,75 / 2 = 0,875 wave up
dec -1,75 / 1,9 = -0,921 wave down
wie ist jetzt der zusammenhang mit dem intervall 25 ms -
@Aphofis sagte :
inc 1,75 / 2 = 0,875 wave up
Das sind 0,875 % pro step. 70 % / 0,875 % = 80 steps. 80 * 25 ms = 2000 ms.
Wenn die Zykluszeit auf 50 ms verdoppelt wird, ergibt sich folgende Rechnung:
3,5 / 2 = 1,75 % pro step. 70% / 1,75 % = 40 steps. 40 * 50 ms = 2000 ms. -
@paul53
OK verstanden!
Also Test ist durchgelaufen!
Die Pumpen werden gesteuert also anhand der Datenpunkte kann man es sehen.
Tunze Wellen Auswahl der Datenpunkt wird von aus (0) auf intervall (2) gesetllt man sieht nur diese stellung
Die pumpen rasseln weiter im Datenpunkt.
Iobroker bleibt stehen die Pumpen Datenpunkte laufen weiter.
Nach einer Zeit wenn Tunze Wellenb Auswahl dann wieder auf aus (0) geschaltet wird ist der Iobroker wieder erreichbar.
Ich glaube da muss ganz dringend ein Pi 4 mit 4 GB RAM her!!! -
@Aphofis sagte:
Ich glaube da muss ganz dringend ein Pi 4 mit 4 GB RAM her!!!
Hast Du es mal mit der doppelten Zykluszeit von 50 ms versucht ?
-
@paul53
meinst du das entlastet den iobroker ? -
-
@paul53
I try -
Läuft mit Sequenzial los wenn Intervall dran kommt bleibt der datenpunkt aud Sequenzial stehen nach ein paar sekunden wechselt der datenpunkt zu Intervall dann bleibt iobroker stehen aber pumpen datenpunkte laufen weiter!
-
Ich denke mit allen anderen adaptern und allen anderen Steuerungen ist iobroker überlastet und 1 GB Ram ist nun mal sehr wenig!
Würde alles über ESP8266 laufen könnte ich einen Linux Server nehmen der ka 16 GB Ram hat und einen Leistungsstarken CPU dann wäre das sicherlich kein Problem. Aber einen Einplatinen Computer zu finden der auch in den Controller kasten passt ist nicht so einfach