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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    true Abfrage alle 2 Sek.

    This topic has been deleted. Only users with topic management privileges can see it.
    • 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
        • Asgothian
          Asgothian Developer @Aphofis last edited by

          @Aphofis Ich empfehle das nicht in Blockly zu tun.

          Aktuell ist es anscheinend nicht möglich, den Timeout im Blockly durch eine Variable zu setzen. Ich kann Dir jetzt aber auch einen JS Script-stub schreiben, wo du nur die Namen der Datenpunkte anpassen musst.

          A.

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

            @Asgothian
            Kann man das script auch in blockly einbinden!? Damit ggf auch text nachrichten zb via telegram möglich sind !? Da pures Javascript komme ich null mit klar da was einzubauen. Klar Datenpunkte ändern bekomme ich hin.

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

              @Aphofis
              Nicht ohne weiteres, aber es gibt da einen einfachen Trick: Bau dir die Aktionen die du haben willst als Blockly zusammen, und lass dir dann den JS code anzeigen. Den kannst du dann in das JS Script kopieren. Die relevanten Stellen hab ich im Script markiert

              A.

              var Restzeit, timeout, Nachricht, StartTime;
              var Pump = "Pump Object ID"
              var Schwimmer = 'Schwimmer Object ID'
              
              Restzeit = 300;
              StartTime = -1;
              function PumpOn()
               {
                   if (timeout) { clearTimeout(timeout); timeout = null;};
                   timeout = setTimeout(function () {
                      StartTime = -1;
                     Restzeit = 0;
                      setState(Pump, false);
              // Hier wird die Pumpe abgeschaltet wenn die Zeit abgelaufen ist.
                  }, Restzeit * 1000);
              // Hier wird die Pumpe eingeschaltet.
                  setState(Pump, true);
                  StartTime = (new Date().getSeconds())
              }
              
              on({id: Schwimmer, change: "gt"}, function (obj) {
                if (Restzeit > 0) { PumpOn() };
              });
              on({id: Schwimmer, change: "lt"}, function (obj) {
                if (StartTime > 0) {
                  if (timeout) {
                     clearTimeout(timeout); 
                     timeout = null;
                 }
                 Restzeit = Restzeit - ((new Date().getSeconds()) - StartTime);
                }
                setState(Pump, false);
              // Hier wird die Pumpe abgeschaltet wenn der Schwimmer "false" meldet. 
              // Wichtig - die Pumpe wird hier auch dann abgeschaltet wenn sie nicht vorher über das Script eingeschaltet wurde.
              });
              schedule("0 0 * * *", function () {
                Restzeit = 300;
                if (getState(Schwimmer).val) {PumpOn(); }
              });
              
              Aphofis 2 Replies Last reply Reply Quote 1
              • Aphofis
                Aphofis @Asgothian last edited by

                @Asgothian
                ok dan bastel ich das script mal in meine steuerung

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

                  @Aphofis Viel Glück damit.

                  Noch ein Hinweis: Ich hab die Objekt ID's als Variablen nach oben geholt, so das du sie nur einmal anpassen musst. Und der Schedule ist auf Mitternacht jeden Tag eingestellt.

                  Nachtrag - es war noch ein Fehler drin, ist jetzt behoben.

                  A.

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

                    @Asgothian
                    Das sehr nett!
                    Können das das normale Blockly und das JavaScript gemeinsam laufen oder kann man das bestehende mit einbauen!?
                    Da über mein bisheriges Blockly Script die Osmose Steuerung läuft und wiederrum über das Magnet Ventil der Osmose Tages und GEsamtzähler.

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

                      @Aphofis
                      Klar. Es ist egal wie die verschiedenen Scripte erstellt wurden. Du kannst Blockly, JS und Typescript scripte beliebig mischen.

                      A.
                      Nachtrag: Ich empfehle sogar die scripte in einzelne logische Blöcke aufzuteilen und als einzelne Scripte laufen zu lassen. Dann kannst du einzelne Funktionen temporär abschalten und die Fehlersuche wird auch einfacher.
                      A.

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

                        @Asgothian
                        Das stimmt!
                        Ich baue auch ungerne mega blocklys wo ich dann des späteren kaum noch überblick habe und mich erst lange ins script einlesen muss.
                        übernimmt denn dein script nun die algemeine osmose steuerung für das magnet ventil !? Da Ja der Osmose Zähler über das magnetventil läuft muss das normale blockly zur osmose steuerung doch eigentlich ausgeschaltet werden.!?

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

                          Das ist die normale Blockly Steuerung für die Osmose

                          var value, status2;
                          
                          /**
                           * Function um umsetzen von true / false nach offen / geschlossen
                           */
                          function umsetzen(value, status2) {
                            if (value == true) {
                              status2 = ' aktiv';
                            } else {
                              status2 = 'inaktiv';
                            }
                            return status2;
                          }
                          
                          
                          on({id: "sonoff.0.Aqua_Float.POWER1"/*Osmose_Niveau*/, change: "ne"}, function (obj) {
                            var value = obj.state.val;
                            var oldValue = obj.oldState.val;
                            if (getState("sonoff.0.Aqua_Float.POWER1").val == true) {
                              setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, true);
                              console.log(('Magnetventil ist ' + String(umsetzen(getState("sonoff.0.Aqua_Control.POWER1").val, status2))));
                            } else if (getState("sonoff.0.Aqua_Float.POWER1").val == false) {
                              setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false);
                              console.log(('Magnetventil ist ' + String(umsetzen(getState("sonoff.0.Aqua_Control.POWER1").val, status2))));
                            } else if (getState("sonoff.0.Aqua_Float.POWER4").val == true) {
                              setState("javascript.0.scriptEnabled.Automatik_Steuerung.Osmose_Niveau_Normal"/*scriptEnabled.Automatik_Steuerung.Osmose_Niveau_Normal*/, false);
                              setState("sonoff.0.Aqua_Control.POWER1"/*Osmose_Magnetventil*/, false);
                            } else if (getState("sonoff.0.Aqua_Float.POWER4").val == false) {
                              setState("javascript.0.scriptEnabled.Automatik_Steuerung.Osmose_Niveau_Normal"/*scriptEnabled.Automatik_Steuerung.Osmose_Niveau_Normal*/, true);
                            }
                          });
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • Asgothian
                            Asgothian Developer @Aphofis last edited by

                            @Aphofis
                            Die Frage kann ich dir nicht beantworten. Dafür kenne ich mich mit dem was du steuern willst einfach nicht genug aus. Prinzipiell können 2 Scripte die gleichen Objekte ansteuern, allerdings ist dann (in diesem Beispiel) nicht sichergestellt das die Pumpe wirklich nur 300 s läuft, diese Zeitabfrage gilt nur für die Zeit die durch den Schwimmer eingeschaltet ist.

                            A.

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

                              @Asgothian
                              Das macht dann auch keinen Sinn beides laufen zu lassen.
                              Dann lasse ich nur das JavaScript laufen und werde beobachten und testen. Dann melde ich mich wie es läuft.
                              Vielen Dank

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

                                Also was ich sagen kann Magnetvetil reagiert auf den Schwimmer und Osmose wird fleißig weter gezählt.
                                Das blockly zum steuern vom magnetventil hab ich abgeschaltet.
                                Kann man eine telegram nachricht einbauen wenn die 300 sek bzw 10 liter am tag erreicht sind !?
                                denn davon ist auch abhängig wann ich den Salzgehalt im Becken angleichen muss.

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

                                  @Aphofis
                                  Das einfachste ist das du an der Stelle wo die Pumpe abgestellt wird weil die Zeit abgelaufen ist die Meldung mit einbaust.

                                  Du kannst auch im Schedule wo die Restzeit zurück gesetzt wird eine Nachricht absetzen wieviele Minuten die Pumpe am Vortag gelaufen ist (wenn Restzeit < 0 -> 5 Minuten, ansonsten (300 - Restzeit) / 60 Minuten). Wenn du dann den Zeitpunkt von Mitternacht auf sagen wir 10 Uhr Abends oder 8 Uhr morgens setzt, dann stoert das ggf. auch nicht so beim Schlafen 🙂

                                  A.

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

                                    @Asgothian
                                    Das

                                    JavaScript
                                    

                                    umbauen in Blockly ist keine Option?

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

                                      @Aphofis
                                      Das was ich dir geschrieben habe leider nicht - du musst im Blockly die Zeit fuer den Timeout fest vorgeben und kannst keine Variable dafür benutzen - zumindest konnte ich das nicht.

                                      Wenn diese Funktionalität existiert, dann schon.

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

                                        @Asgothian
                                        Kann ich jemanden im Forum Fragen, der deinen Javascript Code vllt umhechseln kann ins Blockly!?

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

                                          @Asgothian
                                          Wenn das script per steuerung zb in der fütterungspause deaktiviert wir, bleibt der timer mit der gemessenen zahl bestehen? und läuft nach einschalten des scripts normal weiter ???

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

                                            @Aphofis sagte in true Abfrage alle 2 Sek.:

                                            @Asgothian
                                            Wenn das script per steuerung zb in der fütterungspause deaktiviert wir, bleibt der timer mit der gemessenen zahl bestehen? und läuft nach einschalten des scripts normal weiter ???

                                            Wenn die Pumpe gerade eingeschaltet ist, und du dann das Script beendest dann wird die Pumpe nicht abgeschaltet, und bei einem Neustart wird die Variable neu mit 300 initialisiert.

                                            Um das zu verhindern macht es meiner Meinung nach sinn einen Datenpunkt "Futtermodus" zu erstellen, und im Script einfach nur das Aktivieren der Pumpe zu unterbinden wenn der Futtermodus aktiviert wird, und nach Ende des Futtermodus wieder zum normalen Ablauf zurück zu kehren.

                                            A.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            848
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

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