Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. PWM Steuerung mit Fade

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    PWM Steuerung mit Fade

    This topic has been deleted. Only users with topic management privileges can see it.
    • Aphofis
      Aphofis last edited by

      Hab mich bei der Steuerung auch etwas vertan es muss von 30 rauf auf 100 dann runter auf 30 und wieder hoch auf 100 und wieder runter auf 30
      Die Steuerungen die abruppt starten sind Wellengang und impuls
      Sequezial und intervall laufen normal rauf runter

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Aphofis last edited by

        @Aphofis
        2000 : 70 = 28,57 (ca. 29)
        1900 : 70 = 27,14 (ca. 27)

        Aphofis 1 Reply Last reply Reply Quote 0
        • Aphofis
          Aphofis @paul53 last edited by Aphofis

          @paul53
          OK bauchlöchern
          also 70 entspricht den schritten 30 bis 100 also 70% die gezählt werden.
          entspricht 1% schritt bei 2 sek dann 28,57 ms und bei 1,9 sek 27,14 ms

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Aphofis last edited by

            @Aphofis sagte:

            also 70 entspricht den schritten 30 bis 100 also 70% die gezählt werden.
            entspricht 1% schritt bei 2 sek dann 28,57 ms und bei 1,9 sek 27,14 ms

            Exakt.

            @Aphofis sagte in PWM Steuerung mit Fade:

            es muss von 30 rauf auf 100 dann runter auf 30 und wieder hoch auf 100 und wieder runter auf 30
            normal soll sie dann wieder von vorne anfangen also in einer schleife.

            Blockly_temp.JPG

            Aphofis 1 Reply Last reply Reply Quote 0
            • Aphofis
              Aphofis @paul53 last edited by

              @Aphofis

              Spitze!
              Mal eine Persöhliche Frage, hast du sowas gelernt?
              Also programmieren oder angeeignet?
              Das echt der Hammer was du an Steuerungen aus dem Zauberhut holst. 👍 👍 👍

              paul53 1 Reply Last reply Reply Quote 0
              • Aphofis
                Aphofis last edited by

                @paul53
                ist es so Korrekt?

                var sequenzial, Intervall, spannung, Intervall2;
                
                /**
                 * Beschreibe diese Funktion …
                 */
                function Welle() {
                  Intervall = setInterval(function () {
                    spannung = (typeof spannung == 'number' ? spannung : 0) + 1;
                    setState("sonoff.0.Aqua_Float_Pumps.Sequenzial_Float"/*Sequenzial_Float*/, spannung);
                    if (spannung >= 100) {
                      (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
                      Intervall2 = setInterval(function () {
                        spannung = (typeof spannung == 'number' ? spannung : 0) + -1;
                        setState("sonoff.0.Aqua_Float_Pumps.Sequenzial_Float"/*Sequenzial_Float*/, spannung);
                        if (spannung <= 30) {
                          (function () {if (Intervall2) {clearInterval(Intervall2); Intervall2 = null;}})();
                          if (sequenzial) {
                            Welle();
                          }
                        }
                      }, 29);
                    }
                  }, 27);
                }
                
                
                on({id: 'sonoff.0.Aqua_Float_Pumps.Sequenzial', change: "ne"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  sequenzial = (obj.state ? obj.state.val : "");
                  if (sequenzial) {
                    spannung = 30;
                    setState("sonoff.0.Aqua_Float_Pumps.Sequenzial_Float"/*Sequenzial_Float*/, spannung);
                    Welle();
                  }
                });
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @Aphofis last edited by

                  @Aphofis sagte:

                  angeeignet?

                  Ja.

                  @Aphofis sagte in PWM Steuerung mit Fade:

                  ist es so Korrekt?

                  Sieht gut aus.

                  Aphofis 1 Reply Last reply Reply Quote 0
                  • Aphofis
                    Aphofis @paul53 last edited by Aphofis

                    @paul53
                    Echt Hut ab! Ich kenne ja nun einige Script Sprachen und hatte damals auch viel mit C++ am Hut wenn dir das vllt noch was sagt der IRC also Internet Relay Chat der vorgänger von ICQ alias Mirc.
                    Aber einen Trick gibts da sicherlich auch nicht, um Blockly besser zu verstehen.
                    Ich denke, entweder man schnallt es oder man schnallt es nicht.
                    Wenn ich eine fertige Steuerung sehe, kann ich mir den Ablauf vorstellen aber selsbt programmieren klappt nicht so ganz.
                    Zumindest wenn es um so komplexe Steuerungen geht.

                    paul53 1 Reply Last reply Reply Quote 0
                    • Aphofis
                      Aphofis last edited by

                      @paul53
                      Ich hatte mir die Strömungen mal rausgeschrieben, dann siehst du vllt was ich vor habe an Strömungs Programmen.
                      Ich hoffe du wirst schlau draus.

                      IMG_5136.jpg
                      IMG_5137.jpg
                      Wie gesagt Sequenzial war falsch rum, so wie die jetzige Steuerung ist ist es perfekt.
                      fehlen nur noch die drei anderen.
                      Nur wie man von 30% dann zb in in 530 ms rauf geht auf 100% und dann abruppt runter auf 30% dort halten für 600 ms und dann wieder von vorne. weiß ich eher nicht.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Aphofis last edited by

                        @Aphofis sagte:

                        Nur wie man von 30% dann zb in in 530 ms rauf geht auf 100%

                        Von 30% auf 100% wie gehabt - aber bitte nicht in 1 % Schritten (CPU-Last)

                        und dann abruppt runter auf 30%

                        falls spannung >= 100
                        setze spannung auf 30
                        steuere DP mit spannung

                        dort halten für 600 ms und dann wieder von vorne.

                        Timeout 600 ms: Funktion wieder aufrufen

                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @Aphofis last edited by

                          @Aphofis sagte:

                          Ich kenne ja nun einige Script Sprachen und hatte damals auch viel mit C++ am Hut

                          Dann sollte Javascript nicht schwer fallen. Meine ioBroker-Skripte erstelle ich nur in Javascript, denn Blockly hat Einschränkungen und finde ich umständlicher.

                          Aphofis 1 Reply Last reply Reply Quote 0
                          • Aphofis
                            Aphofis @paul53 last edited by

                            @paul53
                            Mann mann mann ne also blöcke da kann ich mir eher was vorstellen aber jeder wie er kann.
                            Liegt vllt daran weil ich Handwerker bin aber dem einen liegt es mehr dem anderen weniger.
                            Zu meinem Glück, gibt es ja nette Menschen wie dich, die mir bei sowas helfen.😁

                            1 Reply Last reply Reply Quote 0
                            • Aphofis
                              Aphofis last edited by

                              @paul53
                              ist es möglich das man zb zwei Datenpunkte zu Sequenzial anlegt in die man dann zb Sequenzial_up und Sequenzial_down die 2000 ms und 1900 ms angibt und in der Steuerung werden die ms für 1 % errechnet und dann für die beiden Timeouts benutzt.

                              paul53 2 Replies Last reply Reply Quote 0
                              • Aphofis
                                Aphofis last edited by

                                Also hab jetzt mal einen Datenpunkt in meinem Datenpunkt Ordner erstellt.
                                Dann einen ESP geflashed und 4 PWM Kanäle erstellt.
                                Den Datenpunkt Sequenzial als Logikwert switch eingestellt und in der steuerung verknüpft
                                genau so den Level Dimmer vom PWM Channel 1 verknüpft
                                wenn ich nun den Datenpunkt auf true setze läuft die Steuerung los und man sieht den PWM Channel los rennen doch lässt sich leider der Datenpunkt Sequenzial nicht mehr abschalten.
                                Wenn ich in der Weboberfläche vom Sonoff in die Konsole gucke sieht man wie die Werte per MQTT rein kommen und verabrietet werden.

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @Aphofis last edited by

                                  @Aphofis sagte in PWM Steuerung mit Fade:

                                  ist es möglich das man zb zwei Datenpunkte zu Sequenzial anlegt in die man dann zb Sequenzial_up und Sequenzial_down die 2000 ms und 1900 ms angibt und in der Steuerung werden die ms für 1 % errechnet und dann für die beiden Timeouts benutzt.

                                  In Javascript kein Problem, aber in Blockly so nicht möglich, da Zeiten im Intervall Konstanten sind. In Blockly kann man nur die Stufenweite (1 %/-1,05 %) variabel gestalten.

                                  1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @Aphofis last edited by paul53

                                    @Aphofis
                                    MIt einer festen Zykluszeit von 25 ms und einem variablen Delta sollte es so funktionieren:

                                    Blockly_temp.JPG

                                    Aphofis 1 Reply Last reply Reply Quote 0
                                    • Aphofis
                                      Aphofis @paul53 last edited by Aphofis

                                      @paul53
                                      dh delta ist der variable wert der aus den Datenpunkten ermittelt wird und dann in der Steuerung zu den 25 ms dazu gezählt wird!?
                                      Gebe ich in den Datenpunkten dann ms oder sek ein !?
                                      Eine Lösung dazu das die Steuerung abgeschaltet werden kann hast du nicht!?
                                      Kann es sein das der Pi überlastet ist mit der Art steuerung !?

                                      paul53 1 Reply Last reply Reply Quote 0
                                      • paul53
                                        paul53 @Aphofis last edited by paul53

                                        @Aphofis sagte:

                                        delta ist der variable wert der aus den Datenpunkten ermittelt wird

                                        Ja.

                                        @Aphofis sagte in PWM Steuerung mit Fade:

                                        und dann in der Steuerung zu den 25 ms dazu gezählt wird!?

                                        Nein, um den Wert delta ändert sich die Spannung (in %) alle 25 ms.

                                        @Aphofis sagte in PWM Steuerung mit Fade:

                                        Gebe ich in den Datenpunkten dann ms oder sek ein !?

                                        Steht doch im Kommentar: ms

                                        @Aphofis sagte in PWM Steuerung mit Fade:

                                        Eine Lösung dazu das die Steuerung abgeschaltet werden kann hast du nicht!?

                                        Mit stop zyklische Ausführung Intervall wird bei 30 % abgeschaltet, wenn der Datenpunkt "sonoff.0.Aqua_Float_Pumps.Sequenzial" false ist. Soll die Spannung auf 0 % gehen ?

                                        @Aphofis sagte in PWM Steuerung mit Fade:

                                        Kann es sein das der Pi überlastet ist mit der Art steuerung !?

                                        Das ist gut möglich, denn eine Zykluszeit von 25 ms ist sehr ambitioniert.

                                        Aphofis 1 Reply Last reply Reply Quote 0
                                        • Aphofis
                                          Aphofis @paul53 last edited by

                                          @paul53
                                          Also es ist ja nur eine von vier Steuerungen und jede für sich soll ja so lange in einer Schleife laufen bis ein anderer der Datenpunkte auf true gesetzt wird.
                                          Es sollte dann nachher so aussehen:

                                          Programm (Zeitsteuerung wann welcher Datenpunkt aktiv sein soll "Sequenzial, Intervall, Pulse und Wellengang)

                                          Sequenzial (true/false)
                                          Sequenzial_Wave_Up (Wellenlänge hoch in ms)
                                          Sequenzial_Wave_Down (Wellenlänge runter in ms)

                                          Intervall (true/false)
                                          Intervall_Wave_Down (Wellenlänge runter in ms)
                                          Intervall_Wave_Hold (Wellenlänge halten in ms)

                                          Pulse (true/false)
                                          Pulse_Wave_Up (Wellenlänge hoch in ms)
                                          Pulse_Wave_Stop (Wellenlänge Stop in ms)

                                          Wellengang (true/false)
                                          Wellengang_Wave_Up (Wellenlänge hoch in ms)
                                          Wellengang_Wave_Hold (Wellenlänge halten in ms)

                                          Wie man es nun bewerkställigt das sich der Datenpunkt abschalten lässt, weiß ich auch nicht.
                                          Im Test Modus mit einem virtuellen Datenpunkt funktionierte es aber mit einem verknüpften ESP über die Level Dimmer funktion bleibt der Datenpunkt im true und ich muss den ESP neustarten, damit ich den Datenpunkt stoppen kann. Ich hatte natürlich noch nicht versucht wenn es dann alle Datenpunkte gibt wie es dann ist wenn der Programm Ablauf die Datenpunkte schaltet ob das dann geht !?

                                          paul53 1 Reply Last reply Reply Quote 0
                                          • Aphofis
                                            Aphofis last edited by

                                            @paul53
                                            ist es so korrekt?

                                            var inc, dec, sequenzial, spannung, delta, Intervall;
                                            
                                            
                                            inc = 1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up").val;
                                            dec = -1750 / getState("Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down").val;
                                            on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial', change: "ne"}, function (obj) {
                                              var value = obj.state.val;
                                              var oldValue = obj.oldState.val;
                                              sequenzial = (obj.state ? obj.state.val : "");
                                              if (sequenzial) {
                                                spannung = 30;
                                                setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung);
                                                delta = inc;
                                                Intervall = setInterval(function () {
                                                  spannung = (typeof spannung == 'number' ? spannung : 0) + delta;
                                                  setState("sonoff.0.Aqua_Wave.Channel1"/*Aqua_Wave_Pump_1*/, spannung);
                                                  if (spannung >= 100) {
                                                    delta = dec;
                                                  }
                                                  if (spannung <= 30) {
                                                    delta = inc;
                                                    if (!sequenzial) {
                                                      (function () {if (Intervall) {clearInterval(Intervall); Intervall = null;}})();
                                                    }
                                                  }
                                                }, 25);
                                              }
                                            });
                                            // Sequenzial_Up (ms)
                                            on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Up', change: "ne"}, function (obj) {
                                              var value = obj.state.val;
                                              var oldValue = obj.oldState.val;
                                              inc = 1750 / (obj.state ? obj.state.val : "");
                                            });
                                            // Sequenzial_Down (ms)
                                            on({id: 'Aqua_Control.0.Tunze_Steuerung.Sequenzial_Wave_Down', change: "ne"}, function (obj) {
                                              var value = obj.state.val;
                                              var oldValue = obj.oldState.val;
                                              dec = -1750 + (obj.state ? obj.state.val : "");
                                            });
                                            
                                            paul53 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            949
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            2
                                            97
                                            5516
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo