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.
    • 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
                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            794
                                            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