Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. true Abfrage alle 2 Sek.

    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

    true Abfrage alle 2 Sek.

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

      @Aphofis Hab gerade wenig Zeit und verstehe die Steuerung immer noch nicht. Was ist ein Vlies Motor und wie lässt der sich im ioBroker ansteuern?

      Ein Ansatz wäre:

      Wenn der Schwimmschalter auf true schaltet, wird 2s später das Abschalten geprüft. Das wird aber nur ausgeführt, wenn er noch auf true ist. Also wird ein kurzes schwappen ausgeblendet.

      var timeout;
      
      function Abschalten() {
        if (getState("ID Schwimmschalter").val === true) 
              setState("ID Pumpe", false);
      }
      
      // Prüfung Schwimmschalter State und 2s später Auslösung Abschaltung
      on({id: "ID Schwimmschalter", val: true, ack: true}, function (obj) {
          timeout = setTimeout(function () {
            Abschalten();
          }, 2000);
      });
      
      

      Das kann man natürlich auch umdrehen und auf false triggern.

      Grüße

      Brati

      Aphofis 1 Reply Last reply Reply Quote 0
      • Dr. Bakterius
        Dr. Bakterius Most Active @Aphofis last edited by Dr. Bakterius

        @Aphofis Ich glaube, es wäre für dich und alle die dir helfen wollen gut, mal folgendes zu probieren:

        Schreibe auf wann du was machen möchtest. So in der Art "WENN Datenpunkt_1 = WAHR DANN SCHALTE Ausgang_1 EIN FÜR 2 Sekunden".

        oder

        ALLE 2 Sekunden
        WENN Datenpunkt_1 = WAHR UND Heutige_Betriebsdauer <= 10 DANN ...

        Dann wird dir vielleicht selbst klar, wie du das in Blockly umsetzen kannst bzw. kann man dir dann hier relativ leicht helfen. Doch mit deiner Beschreibung kann ich auch nichts anfangen weil ich die Aufgabe nicht verstehe.

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

          @Brati
          Kannst du das vllt auch als Blockly Code hier posten?
          Das wäre sehr nett.

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

            @Aphofis sagte in true Abfrage alle 2 Sek.:

            @Brati
            Kannst du das vllt auch als Blockly Code hier posten?
            Das wäre sehr nett.

            Ich bin nicht so der Blockly Freund, aber das sollte passen;

            <xml xmlns="http://www.w3.org/1999/xhtml">
             <variables>
               <variable type="undefined" id="timeout">timeout</variable>
               <variable type="" id="}]r5t%}7KgcAASS(k9!!">Schwimmschalter</variable>
             </variables>
             <block type="procedures_defnoreturn" id="$L{ieOwN-~dyS6^_B$|9" x="138" y="88">
               <field name="NAME">Abschalten</field>
               <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
               <statement name="STACK">
                 <block type="controls_if" id="_TYbL.9|Hjss}Yr#Zn__">
                   <value name="IF0">
                     <block type="logic_compare" id="4k3$)F+@J81Qijf0D^To">
                       <field name="OP">EQ</field>
                       <value name="A">
                         <block type="variables_get" id="*jL=s^t)GiBpS-@[Z4yU">
                           <field name="VAR" id="}]r5t%}7KgcAASS(k9!!" variabletype="">Schwimmschalter</field>
                         </block>
                       </value>
                       <value name="B">
                         <block type="logic_boolean" id="yrRZ-1`yaM%CLe!Q]dbc">
                           <field name="BOOL">TRUE</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <statement name="DO0">
                     <block type="control" id="841mIdN675:WOH(-SDEl">
                       <mutation delay_input="false"></mutation>
                       <field name="OID">Object ID</field>
                       <field name="WITH_DELAY">FALSE</field>
                       <value name="VALUE">
                         <block type="logic_boolean" id="U`r;}a5p:Cw*eYgT.L[y">
                           <field name="BOOL">FALSE</field>
                         </block>
                       </value>
                     </block>
                   </statement>
                 </block>
               </statement>
             </block>
             <block type="on_ext" id="O{|n_o^=X$tpf5$|:JWS" x="137" y="238">
               <mutation items="1"></mutation>
               <field name="CONDITION">true</field>
               <field name="ACK_CONDITION"></field>
               <value name="OID0">
                 <shadow type="field_oid" id="Br4b+5qLzBhT_Zi:nbSG">
                   <field name="oid">default</field>
                 </shadow>
               </value>
               <statement name="STATEMENT">
                 <block type="timeouts_settimeout" id=";`yh^JS+sRT.WfWpBU+{">
                   <field name="NAME">timeout</field>
                   <field name="DELAY">2</field>
                   <field name="UNIT">sec</field>
                   <statement name="STATEMENT">
                     <block type="procedures_callnoreturn" id="*rpHAQc{X6nm32%-H5v1">
                       <mutation name="Abschalten"></mutation>
                     </block>
                   </statement>
                 </block>
               </statement>
             </block>
            </xml>
            

            Zwischenablage01.jpg

            Grüße

            Brati

            Aphofis 1 Reply Last reply Reply Quote 1
            • Aphofis
              Aphofis @Brati last edited by

              @Brati
              Danke!
              Werde ich morgen gleich mal testen!

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

                So ganz habe ich das noch nicht verstanden!
                Wo kommt denn da hin das wenn true true ist das dann das hin wo man ein Gerät steuert wenn true tatsächlich true ist.
                Kann man das geprüfte true auch auf sagen wir mal auf 10 min. Am Tag begrenzen ?

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

                  @Aphofis sagte in true Abfrage alle 2 Sek.:

                  Wo kommt denn da hin das wenn true true ist das dann das hin wo man ein Gerät steuert wenn true tatsächlich true ist.

                  So ganz habe ich diesen Satz nicht verstanden 😵

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

                    @AlCalzone
                    Hihi
                    Also es soll alle x Sek. Geprüft werden ob ein Objekt true ist wenn true dann soll ein anderes Objekt gesteuert werden und wenn das Objekt false ist soll es wieder abgeschaltet werden.
                    Des weiteren soll das zu steuernde Objekt nur Max X min. In 24 std betätigt sein.
                    Hoffe so ist es verständlicher

                    arteck AlCalzone 2 Replies Last reply Reply Quote 0
                    • arteck
                      arteck Developer Most Active @Aphofis last edited by

                      @Aphofis sag doch mal genauer was du machen willst..

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

                        @Aphofis sagte in true Abfrage alle 2 Sek.:

                        Also es soll alle x Sek. Geprüft werden ob ein Objekt true ist

                        Also üblicherweise wird in der ioBroker-Welt nicht gepollt (regelmäßige Abfrage), sondern auf Änderung eines Zustands (in deinem Fall false -> true bzw. true -> false) reagiert. Die Zeitbeschränkung kann man z.B. über Timeouts realisieren.

                        Für deine weitere Bedingung (x Minuten pro 24h) wäre allerdings noch zu klären, wann der Zähler zurück gesetzt wird. Sollen maximal x Minuten im Zeitraum von 0:00 bis 23:59 geschaltet sein, oder gleitend für jeweils die letzten 24h, oder...?

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

                          @arteck
                          Also:
                          Ich versuche es zu erklären.
                          Ich möchte das der Zustand true meines Schwimmers für die Osmose Anlage alle zb. 30 Sek. Geprüft wird damit ggf dann das Magnet Ventil Osmose Wasser pumpt. Damit falls warum auch immer es zu einem Netzwerk Abbruch kommt und das Magnet Ventil auf true stehen bleibt da der Schwimmer nicht mehr erreichbar ist weil beide auf getrennten ESP8266s mit Tasmota laufen.
                          Darum will ich das nur Maximal 300 Sek. In einem 24 Std. Zyklus also von 0:00-23:59 laufen da ich nie mehr als 10 Liter Osmose Verbrauch am Tag habe und 1 ml entspricht 29,7 Millisekunden.
                          Daraus ergeben sich dann aufgerundet 300 Sek.
                          Da mein Technik Becken locker 30 Liter Wasser aufnehmen kann aber vor 3 Wochen war es so das 24 Liter Wasser kontinuierlich ins Technik Becken gepumpt wurden und der dünne Salzgehalt gefiel meinen Korallen überhaupt nicht.
                          Durch die unnormalen Dosierungen und durch abnorme Wassermengen die falsch gezählt wurden. Hatte ich alle Schwimmer und alle 12 Volt Geräte vom Pi weg genommen und auf zwei ESP8266s verteilt da diese zuverlässig laufen.
                          Trotz dessen möchte ich da eine Sicherheit einbauen das wenn Schwimmer true ist das auch wirklich Osmose ausgeglichen wird und bei definitiv false nichts passiert und das ganze nicht mehr als 300 Sek. Am Tag. Also im 24 Std. Zyklus und nachts soll dann der Zähler zurück gestellt werden.

                          arteck Asgothian 2 Replies Last reply Reply Quote 0
                          • arteck
                            arteck Developer Most Active @Aphofis last edited by

                            @Aphofis damit kann man doch arbeiten...

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

                              @Aphofis
                              Auch in diesem Fall würde ich NICHT über "Polling" Methoden arbeiten, sondern die Statusänderung abfangen. Die Einzusetzende Methode wäre:

                              • variable für die Restlaufzeit definieren
                              • Trigger auf den Datenpunkt, vergleich Größer als vorher (Wechsel false auf true, triggerA), darin:, Startzeitpunkt merken, timeout starten der nach Ablauf der Restlaufzeit die Pumpe abschaltet und die Restlaufzeit auf 0 setzt, Pumpe anschalten
                              • Trigger auf den Datenpunkt, vergleich Kleiner als vorher (Wechsel true auf false, triggerB), darin: An-Zeit der Pumpe berechnen, gelaufene Zeit von der Restlaufzeit abziehen, Timeout loeschen, Pumpe abschalten.
                              • Schedule definieren - jeweils um Mitternacht: timeout löschen wenn er laeuft, Restlaufzeit auf 300 sek, pruefen ob Datenpunkt = true, wenn ja: Pumpe an, timeout mit Restlaufzeit wie oben.

                              Gegebenenfalls musst du die beiden Trigger noch gegen prellen sichern. Wenn du mal nach "Sensoren entprellen" im Forum suchst dann solltest du etwas finden. Ob das Notwendig ist hängt davon ab in wie weit dein Schwimmer eine Schalthysterese besitzt.

                              Ein regelmäßiges Pollen des Eingangs alle x Sekunden ist so unnötig. Du kannst das aber auch damit machen, wenn du eine Shedule definierst, die alle 30 Sekunden den Wert holt und die Prüfung die im Trigger oben gemacht wird manuell durchführt (letzter Wert false, aktueller Wert true => das was oben triggerA genannt ist ausführen, letzter Wert true, aktueller Wert false => das was oben triggerB genannt ist ausführen.

                              Ich hoffe mit diesem "pseudocode" kommst du zu Recht. Wenn nicht koennen wir das heute Abend gerne gemeinsam in JS Code verwandeln.

                              A.

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

                                @Asgothian
                                Das schon mal ein Anfang!
                                Ob ich das hinbekomme weiß ich noch nicht.
                                Das muss ich sehen.
                                Was meinst du mit gegen prellen!?
                                Die Schwimmer sind jeder über einen 10 kOhm widerstand verdrahtet.
                                Wenn du das meinst?

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

                                  @Aphofis es geht darum zu verhindern das die Pumpe ständig an und aus geschaltet wird wenn der Schwimmer Nähe am Schaltpunkt ist.

                                  A.

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

                                    @Asgothian
                                    Mehr oder minder, Das soll natürlich auch nicht passieren das dass Magentventil zu frü und somit zu lange schaltet.
                                    und es soll geprüft werden ob wirklich true ist und Tasmota ESP definitiv alive ist und nicht mehr als 300 sek am tag gepumpt wird. sprich nicht mehr als um und bei 10 Liter.

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

                                      @Aphofis
                                      Wie sicher gestellt werden kann das der Tasmota ESP aktiv ist hängt davon ab wie die Kommunikation dazu organisiert ist. Vielleicht macht es Sinn das per TS kurz durchzusprechen, dann kann das Script darauf auch reagieren, aber:

                                      • solange wie der Schalter angesteuert werden kann ist sichergestellt das er pro Tag max. 300 s an ist.
                                      • Lässt er sich nicht einschalten, dann bekommt das Script das aktuell nicht mit, ähnlich ist es wenn er sich nicht abschalten lässt.
                                      • Zu beantworten wäre die Frage was passieren soll wenn der ESP nicht erreichbar ist - in diesem Fall kann wenn ich das richtig erinnere nicht geschaltet werden (weder ein noch aus)

                                      A.

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

                                        @Asgothian
                                        also alive muss nicht unbedingt sein.
                                        Es langt ja völlig wenn einfach geprüft wird ob true oder false und nicht mehr als 300 sek am tag.

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

                                          @Aphofis
                                          Das würde das in meinem Ablauf beschriebene Script durchaus leisten. (in beiden Varianten)

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

                                            @Asgothian
                                            Das wäre ja was !? Ich habe mir den kram acuh aufgeschrieben, nur dann das ganze in Blockly umsetzen ist etwas kniffeliger.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            532
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            87
                                            5167
                                            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