Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Variable Zeitsteuerung von Schaltimpulsen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Variable Zeitsteuerung von Schaltimpulsen

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Ich versuche mich gerade an einem Blockly zur Bewässerungssteuerung, da der Adapter Gartenbewässerung leider nicht weiter gepflegt werden wird.

      Ich habe im Moment nur drei Kreise, die bei entsprechender (zu geringer) Bodenfeuchte hintereinander geschaltet werden sollen.

      Warte_1_2.png

      Jetzt bin ich aber nicht mit einer sturen Aneinanderreihung zufrieden, sondern möchte (auch im Hinblick weiterer möglicher Kreise) die Kreise überspringen, die keine Bewässerung brauchen.

      Und genau da hänge ich.
      Ich bitte nur um einen kleinen Tritt, wie ich die Wartezeit und die zu schaltenden Ventile variabel einpflegen kann

      Danke im voraus

      A 1 Reply Last reply Reply Quote 0
      • A
        Ahnungsbefreit @Homoran last edited by

        @homoran Du erstellst Dir je eine Liste für die Feuchte, die Dauer und die abzufragenden Datenpunkte und iterierst dann über die Liste(n).

        Homoran 1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @Ahnungsbefreit last edited by

          @ahnungsbefreit sagte in Variable Zeitsteuerung von Schaltimpulsen:

          @homoran Du erstellst Dir je eine Liste für die Feuchte, die Dauer und die abzufragenden Datenpunkte und iterierst dann über die Liste(n).

          Toll - so eine Antwort hat mir gerade noch gefehlt 😂

          Du überschätzt meine Fähigkeiten bei weitem!

          SBorg 1 Reply Last reply Reply Quote 1
          • SBorg
            SBorg Forum Testing Most Active @Homoran last edited by

            @homoran sagte in Variable Zeitsteuerung von Schaltimpulsen:

            Toll - so eine Antwort hat mir gerade noch gefehlt

            Aber genau die Lösung deines Problemes... 😇
            Um es variabel zu halten solltest du deine Werte zuerst einmal in Objekten ablegen. So kannst du sie bequem per VIS etc. ändern und in deinem Blockly abfragen.
            ...und man nimmt dafür zB. Listen/Arrays wie zB. Dauer = [30, 60, 20] oder Feuchte =[91, 12, 40]

            Diese Liste "grast" man dann ab 😉

            Homoran 1 Reply Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @SBorg last edited by

              @sborg sagte in Variable Zeitsteuerung von Schaltimpulsen:

              Aber genau die Lösung deines Problemes...

              glaube ich euch auf's Wort!
              Aber das wäre erst der Stoff für die Oberstufe.

              @sborg sagte in Variable Zeitsteuerung von Schaltimpulsen:

              man nimmt dafür zB. Listen/Arrays

              dafür hatte ich jetzt die Variablen angelegt, die wollte ich (wie in den Adaptereinstellungen) ja nicht dauernd ändern.

              ok - dann sehe ich mir die Listen mal näher an, das iterieren ist mir schon ein Begriff, habe es nur noch nie selber umgesetzt.

              SBorg 1 Reply Last reply Reply Quote 0
              • SBorg
                SBorg Forum Testing Most Active @Homoran last edited by

                @homoran Du kannst die Listen natürlich auch fest im Blockly eintragen.
                Dann fängt man mit dem 1. Listeneintrag an und ackert sich bis "zur Länge" (=Anzahl der Listeneinträge) der Liste durch. Dann kannst du auch einfach weitere Kreise hinten anhängen. denn durch die Listen arbeitest du nur noch mit einer (oder bei zwei Listen eben mit 2 usw.) Variablen, die immer durch den Listenwert ersetzt wird.
                Man kann zwar auch alles in eine Liste packen, dass wird aber schnell unübersichtlich und fehleranfällig 😉

                Homoran 1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @SBorg last edited by

                  @sborg Danke!
                  aber ich glaube, der Teil ist mir noch halbwegs verständlich.

                  Mein Problem (Denkknoten) ist es, wie ich den Teil nach der Iteration ausführe, in dem ich die Kreise (die ich jetzt mit variablen auf true/false setze und deren geplante Laufzeiten aussetzen/überspringen kann.

                  A 1 Reply Last reply Reply Quote 0
                  • A
                    Ahnungsbefreit @Homoran last edited by

                    @homoran Im Prinzip so:
                    46ca437d-3852-4b73-83be-de8b645f813d-image.png
                    Allerdings ist der Teil Deines Scripts mit den true/false und warte noch irgendwie unlogisch. Wie soll sich den das Script verhalten?
                    Auch die Pause da unten und das leere "Falls" sehen optimierungsfähig aus

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @Ahnungsbefreit last edited by Homoran

                      @ahnungsbefreit sagte in Variable Zeitsteuerung von Schaltimpulsen:

                      Auch die Pause da unten und das leere "Falls" sehen optimierungsfähig aus

                      und nur darum geht es mir!
                      das iterieren hatte ich ja schon verstanden, bei vielen Kreisen ist das mit Sicherheit eleganter, hier komme ich noch mit den Variablen aus.

                      Der letztere Teil (der noch gar nicht da steht) ist es der mir Kopfzerbrechen bereitet.

                      Ich möchte die Kreise nacheinander schalten, jeweils für die vorausgewählte Dauer.
                      Aber wenn die Erde im Kreis 1 noch feucht genug ist will ich diesen Kreis überspringen und direkt mit Kreis 2 beginnen.
                      Daher kann ich nicht einfach die Dauern als Timeout addieren, sondern muss irgendwie die Timeouts dynamisch füttern.

                      Die Steuere Blöcke kommen dann natürlich in den Timeout Block

                      paul53 A 2 Replies Last reply Reply Quote 0
                      • paul53
                        paul53 @Homoran last edited by paul53

                        @homoran sagte: wenn die Erde im Kreis 1 noch feucht genug ist will ich diesen Kreis überspringen und direkt mit Kreis 2 beginnen. Daher kann ich nicht einfach die Dauern als Timeout addieren, sondern muss irgendwie die Timeouts dynamisch füttern.

                        Vorschlag (nur Teil mit Auswertung der 4 Listen):

                        Bild_2021-06-17_164741.png

                        Homoran 1 Reply Last reply Reply Quote 0
                        • A
                          Ahnungsbefreit @Homoran last edited by

                          @homoran So?
                          fee08f55-aec5-494c-b3c9-275a42ed302d-image.png

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @Ahnungsbefreit last edited by

                            @ahnungsbefreit sagte in Variable Zeitsteuerung von Schaltimpulsen:

                            So?

                            nicht wirklich, da müssen noch Zwischenschritte für jeden möglichen Kreis rein.
                            Dein Vorschlag würde ja nur die Gesamtdauer berechnen, oder?

                            Hier noch mal für Kreis 1 und 2 (statisch)
                            Warte_1_2_02.png

                            Jetzt noch der dritte dazu und dabei auch die Möglichkeit bedenken, dass nur 1+3 laufen 😞

                            @paul53 sagte in Variable Zeitsteuerung von Schaltimpulsen:

                            nur Teil mit Auswertung der 4 Listen

                            Danke!
                            darum geht es mir - sehe ich mir nachher am PC an!

                            A 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @paul53 last edited by

                              @paul53 sagte:

                              Vorschlag (nur Teil mit Auswertung der 4 Listen):

                              Jetzt ist das natürlich wieder ein typisches Paul-Blockly 😂 und somit etwas schwerer verdaulich.

                              sehe ich es richtig, dass du im Prinzip die Funktion nochmal innerhalb der Funktion im timeout aufrufst und damit "den Start der zweiten Verzögerung" auch um das erste timeout verzögerst.
                              Dadurch brauchst du keine Rechnungen mehr?

                              Das hatte ich auch vor, wusste aber nicht wie 😢
                              An eine Funktion hatte ich natürlich nicht gedacht

                              paul53 Asgothian 2 Replies Last reply Reply Quote 0
                              • A
                                Ahnungsbefreit @Homoran last edited by

                                @homoran Nein, das sollte schon funktionieren, egal ob einer oder alle oder mehrere Kreise geschaltet werden. Aber Du kannst natürlich gerne auch mit Paul's Vorschlag weiterarbeiten, der ist ja hier der Blockly/JS Guru.

                                Homoran 1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @Ahnungsbefreit last edited by

                                  @ahnungsbefreit sagte in Variable Zeitsteuerung von Schaltimpulsen:

                                  ber Du kannst natürlich gerne auch mit Paul's Vorschlag weiterarbeiten, der ist ja hier der Blockly/JS Guru.

                                  Da wundere ich mich auch immer wieder, wo der noch was aus dem Hut zaubert.

                                  @ahnungsbefreit sagte in Variable Zeitsteuerung von Schaltimpulsen:

                                  Nein, das sollte schon funktionieren, egal ob einer oder alle oder mehrere Kreise geschaltet werden

                                  Dann seh ich mir das noch mal intensiver an, ich will es ja auch verstehen und lernen

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

                                    @homoran sagte: die Funktion nochmal innerhalb der Funktion im timeout aufrufst und damit "den Start der zweiten Verzögerung" auch um das erste timeout verzögerst.

                                    So ist es.

                                    Homoran 1 Reply Last reply Reply Quote 1
                                    • Homoran
                                      Homoran Global Moderator Administrators @paul53 last edited by

                                      @paul53 sagte in Variable Zeitsteuerung von Schaltimpulsen:

                                      So ist es.

                                      Danke!

                                      1 Reply Last reply Reply Quote 0
                                      • Asgothian
                                        Asgothian Developer @Homoran last edited by Asgothian

                                        @homoran sagte in Variable Zeitsteuerung von Schaltimpulsen:

                                        Jetzt ist das natürlich wieder ein typisches Paul-Blockly und somit etwas schwerer verdaulich.

                                        Schwer verdaulich und auch mit Vorsicht zu geniessen. So wie @paul53 es geschrieben hat ist es sauber. Allerdings nutzt es eine "Rekursion", sprich das aufrufen einer Funktion aus genau dieser Funktion heraus. Das kann je nach Situation und Aufbau auch mal schief gehen (unsichtbare Endlosschleife und seltsames Verhalten)

                                        Bitte nicht falsch verstehen - das Skript so ist gut und sollte gehen. Es geht nur darum das man bei Funktionen die sich selber aufrufen genau aufpassen muss damit am Ende alles passt.

                                        Ich hätte das Skript mit einem Hilfs-State zusammen aufgebaut, der auch dafür sorgt das das Skript auch bei einem Neustart 'weiter' bewässert:

                                        Screen Shot 2021-06-17 at 17.23.19 .png

                                        Überall da wo nur "object ID" steht ist der von hand anzulegende Steuerstate gemeint.

                                        Homoran 1 Reply Last reply Reply Quote 1
                                        • Homoran
                                          Homoran Global Moderator Administrators @Asgothian last edited by

                                          @asgothian Auch dir einen großen Dank!

                                          jetzt sind wir doch weit über den Tritt gegen das Schienbein hinaus - war aber auch nötig.
                                          da wäre ich nie drauf gekommen.

                                          Ist alles weit über meinem momentanen Horizont.

                                          Aber ich denke ich werde @paul53 s und dein ( @Asgothian s) Skript mir mal ganz langsam auf der Zunge zergehen lassen.
                                          vielleicht kann ich es doch vollständig nachvollziehen.

                                          Dann hat es die Lernkurve stark beschleunigt

                                          Asgothian 1 Reply Last reply Reply Quote 0
                                          • Asgothian
                                            Asgothian Developer @Homoran last edited by

                                            @homoran sagte in Variable Zeitsteuerung von Schaltimpulsen:

                                            Dann hat es die Lernkurve stark beschleunigt

                                            Dann hätte ich das Ziel erreicht weswegen ich diese Option gepostet hab. 🙂

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            674
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            20
                                            112
                                            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