Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Tankfüllung überwachen / Notaus

    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

    [gelöst] Tankfüllung überwachen / Notaus

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

      Hallo zusammen.

      Ich stecke gerade bei Blockly irgendwie fest und finde leider keine passende Lösung.
      Hoffe ihr könnt mir helfen.

      Es geht grundsätzlich um das Befüllen eines Tanks zur Gartenbewässerung. Diese Bewässerung habe ich schon mit IO-Broker automatisiert. [https://forum.iobroker.net/topic/24321/gartenbewässerung-füllstand-tank](Wer nachlesen möchte)

      Die Automatik zum Befüllen funktioniert soweit auch gut. Es soll bei weniger als 1000l Inhalt ein Ventil aufgehen und bei 2500l Inhalt wieder zu.

      Allerdings ist es so, dass der verbaute Wemos anscheinend manchmal spinnt und keine Werte mehr liefert und dadurch der Tank überläuft wenn er kein Signal bringt, dass der gewünschte Füllstand erreicht ist.

      Daher dachte ich mir, ich baue so etwas wie eine "Not"-Abschaltung ein. Als Beispiel einfach mal:
      Das Signal Füllstand < 1000 kommt und Wemos geht nach 500l Füllung offline. Dann kommt kein Signal mehr um die Füllung abzuschalten.
      Ich habe jetzt versucht mit Timeout eine Abschaltung zu erzwingen, aber das scheint auch nicht richtig zu funktionieren.
      Hier mal mein Versuch
      83c05339-ba0e-450f-87bf-848066b4ae5d-grafik.png

      Ich vergleiche den Füllstand mit einer Variablen, die sich eine Sekunde nach jeder Änderung des aktuellen Tankinhaltes auf eben diesen aktuellen Tankinhalt aktualisiert. Ich vergleiche also den aktuellen mit dem vorigen Wert und aktualisiere diese Variable erst eine Sekunde später, damit diese dann den letzten "aktuellen" Wert hat.

      Wenn der KontrollWert <= Aktuellem Wert ist (Weil der aktuelle sich ja erhöhen sollte) soll der Timeout abgebrochen werden, sonst nicht und der "Notaus" Timer soll ablaufen und wie im Beispiel nach 10min das Ventil schliessen.

      Ganz einfach gesagt: Ich möchte einen Wert vergleichen, wenn dieser sich nicht innerhalb eines bestimmten Zeitraums erhöht/verringert (weil der Wemos keine Daten mehr sendet und sich der Wert damit nicht mehr ändert) soll das Ventil mit false angesteuert werden.

      Kann mir bitte jemand auf die Sprünge helfen?

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

        Hallo,
        vielleicht kannst Du über die Durchflussmenge/Zeiteinheit einen Zeitpunkt für Notaus berechnen? Du könntest zum Beispiel die Zeit festhalten, in der die 1500 l zulaufen. Diese Zeit würde ich nehmen, vielleicht noch 10% addieren und dann mit Zulaufbeginn den Timer starten. Läuft der Timer ab, dann das Ventil schließen. So hast Du die Gewähr, das zumindest der Countdown das Ventil schließt. Ist alles ok, dann würde der Countdown das Ventil höchstens noch einmal schließen. Ich habe mal so ein Blockly mit Countdown getestet. Sieht so aus:

        9ba5f36e-82c6-4ea6-ad62-f36f629c754f-image.png

        757e0ca2-4344-4def-b169-c37b0777fd90-image.png

        Das "Hauptscript" wird getriggert über den Status des Objektes (hier mal ein Thermostat, wenn es in den Boostmodus geschaltet wird). Dann startet der Timer cnt (Blocklyvariable). Der obere Teil des Scriptes zählt im Sekundentakt die 300 Sekunden runter und aktualisiert den Datenpunkt count_down (als Zahl definiert). Wenn der Timer abgelaufen ist, wird hier testweise der DP Start_300 auf false gesetzt. Vielleicht reicht Dir das als "Notaus". Den DP count_down kann man dann auch in der VIS anzeigen.
        Habe mal den Export des Scripts angehängt.

        <xml xmlns="https://developers.google.com/blockly/xml">
          <variables>
            <variable id="DqZh89?2P1c|{#Kl.c:}">cnt</variable>
            <variable type="interval" id="Intervall">Intervall</variable>
          </variables>
          <block type="procedures_defnoreturn" id="$4!9luz@`f}qaHW,jd[~" x="38" y="63">
            <field name="NAME">counter</field>
            <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
            <statement name="STACK">
              <block type="comment" id="66@f%/Cjnyx-]HwB/*5#">
                <field name="COMMENT">Anzeige Restzeit</field>
                <next>
                  <block type="update" id="uS?Yo@_bGDaG|n?oVU9j">
                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                    <field name="OID">0_userdata.0.count_down</field>
                    <field name="WITH_DELAY">FALSE</field>
                    <value name="VALUE">
                      <block type="variables_get" id="#_c^[d~Zd.YHUCBBMJ5D">
                        <field name="VAR" id="DqZh89?2P1c|{#Kl.c:}">cnt</field>
                      </block>
                    </value>
                    <next>
                      <block type="comment" id="WE,wlm3pw?DAH;6|52?V">
                        <field name="COMMENT">Anzeige Restzeit</field>
                        <next>
                          <block type="timeouts_setinterval" id="@+=G3M1P=dpeXA|;?;|y">
                            <field name="NAME">Intervall</field>
                            <field name="INTERVAL">1</field>
                            <field name="UNIT">sec</field>
                            <statement name="STATEMENT">
                              <block type="math_change" id="t|D^zBw(Kz~N=,)[s`iR">
                                <field name="VAR" id="DqZh89?2P1c|{#Kl.c:}">cnt</field>
                                <value name="DELTA">
                                  <shadow type="math_number" id="f_51T_+YcWU??8/+dJ5A">
                                    <field name="NUM">-1</field>
                                  </shadow>
                                </value>
                                <next>
                                  <block type="update" id="RRs7hbJ^94I;!S*LxE5a">
                                    <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                    <field name="OID">0_userdata.0.count_down</field>
                                    <field name="WITH_DELAY">FALSE</field>
                                    <value name="VALUE">
                                      <block type="variables_get" id="]+)7}km@c{16/cSi`k{L">
                                        <field name="VAR" id="DqZh89?2P1c|{#Kl.c:}">cnt</field>
                                      </block>
                                    </value>
                                    <next>
                                      <block type="controls_if" id="et,bY|$:9]NKvwjKAvfr">
                                        <value name="IF0">
                                          <block type="logic_compare" id="4Ww%fy7D0#?|$7?KEO:8">
                                            <field name="OP">LTE</field>
                                            <value name="A">
                                              <block type="variables_get" id="~kEXPP;4]cw#3$eoABZ+">
                                                <field name="VAR" id="DqZh89?2P1c|{#Kl.c:}">cnt</field>
                                              </block>
                                            </value>
                                            <value name="B">
                                              <block type="math_number" id="{X8Bf1VT(E;2.6P?I.VF">
                                                <field name="NUM">0</field>
                                              </block>
                                            </value>
                                          </block>
                                        </value>
                                        <statement name="DO0">
                                          <block type="timeouts_clearinterval" id=";a4mJFuU%?{il@I#P!ro">
                                            <field name="NAME">Intervall</field>
                                            <next>
                                              <block type="control" id="v6w={2e7t46q8]2)jMm|">
                                                <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                                <field name="OID">0_userdata.0.Start_300</field>
                                                <field name="WITH_DELAY">FALSE</field>
                                                <value name="VALUE">
                                                  <block type="logic_boolean" id="3a-*e7[?#?CCK%{tO@gX">
                                                    <field name="BOOL">FALSE</field>
                                                  </block>
                                                </value>
                                              </block>
                                            </next>
                                          </block>
                                        </statement>
                                      </block>
                                    </next>
                                  </block>
                                </next>
                              </block>
                            </statement>
                          </block>
                        </next>
                      </block>
                    </next>
                  </block>
                </next>
              </block>
            </statement>
          </block>
          <block type="on_ext" id="xX,qCotbEYAQANRG*9Ab" x="38" y="438">
            <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
            <field name="CONDITION">true</field>
            <field name="ACK_CONDITION"></field>
            <value name="OID0">
              <shadow type="field_oid" id="|Gb}d{Eq[c|M!QB2=TT!">
                <field name="oid">hm-rpc.1.OEQ1257899.4.BOOST_MODE</field>
              </shadow>
            </value>
            <statement name="STATEMENT">
              <block type="variables_set" id="t?=zwdkfoX[N1rj%m2uI">
                <field name="VAR" id="DqZh89?2P1c|{#Kl.c:}">cnt</field>
                <value name="VALUE">
                  <block type="math_number" id="=7:R|MIKYw!Py@B76ji%">
                    <field name="NUM">30</field>
                  </block>
                </value>
                <next>
                  <block type="procedures_callnoreturn" id="4t9tb#jq4p/RRs!r}(VS">
                    <mutation name="counter"></mutation>
                  </block>
                </next>
              </block>
            </statement>
          </block>
        </xml>
        

        Habe das mal schnell auf meiner VIS dargestellt: coundown.mp4
        Die Darstellung der Zahl ist das odometer-widget aus den hqwidgets und auf car eingestellt.
        c4da74c0-1730-4ca3-a77d-88cd2b6690d4-image.png
        Im Video habe ich nur 10 Sekunden dargestellt, habe dann die Aufzeichnung abgebrochen. Die Anzeige geht aber bis auf 000 runter.

        1 Reply Last reply Reply Quote 1
        • M
          maniac last edited by

          Hallo.

          Das ist natürlich auch ein Ansatz. Nicht ganz wie ich es mir vorgestellt habe, da ich so ja nicht mitbekomme wenn sich die Werte nicht mehr ändern, aber immerhin ein definitives Ausschalten des Zulaufs.
          Das habe ich zumindest schon mal so übernommen und eingebunden. Danke Dir.

          Jemand noch eine Idee zum Wertevergleich?

          paul53 1 Reply Last reply Reply Quote 1
          • paul53
            paul53 @maniac last edited by paul53

            @maniac sagte:

            mit Timeout eine Abschaltung zu erzwingen, aber das scheint auch nicht richtig zu funktionieren.

            Wenn keine Werte mehr geliefert werden, erfolgt auch kein Triggern. Ein Wertevergleich ist nicht erforderlich. Vorschlag (nicht getestet):

            Blockly_temp.JPG

            Wert findet man unter "Trigger".

            M 1 Reply Last reply Reply Quote 1
            • M
              maniac @paul53 last edited by

              @paul53 sagte in Tankfüllung überwachen / Notaus:

              @maniac sagte:

              mit Timeout eine Abschaltung zu erzwingen, aber das scheint auch nicht richtig zu funktionieren.

              Wenn keine Werte mehr geliefert werden, erfolgt auch kein Triggern. Ein Wertevergleich ist nicht erforderlich. Vorschlag (nicht getestet):

              Danke, aber mir ist noch nicht ganz klar was "Ventil" jetzt ist. Oben im ersten "Falls" ist es wohl direkt das Ventil auf/zu.

              Aber was bedeutet es unten? Das ist doch eine Variable?
              7a57d3b7-ac34-40c3-8439-adec2296256d-grafik.png

              Welche ObjektID soll ich da einbinden/ansteuern?
              Und bei "Falls Ventil" - Falls Ventil was? Also worauf wird dort abgefragt?

              So ganz verstehe ich es leider noch nicht.

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

                @maniac sagte:

                Welche ObjektID soll ich da einbinden/ansteuern?

                In allen 3 Fällen ist das der Datenpunkt des Ventil-Aktors "Ventil_Frischwasser".

                Und bei "Falls Ventil" - Falls Ventil was?

                falls ventil entspricht falls ventil == wahr

                @maniac sagte in Tankfüllung überwachen / Notaus:

                Aber was bedeutet es unten? Das ist doch eine Variable?

                Ja, die den gleichen Wert hat wie der Ventil-Aktor, denn der wurde unmittelbar davor mit dem Wert der Variablen gesteuert.

                Die Variable ventil ist der Sollzustand des Aktors. Der Aktor wird nur gesteuert, wenn Sollzustand != Istzustand (obere falls-Abfrage), um nicht unnötige Störungen zu erzeugen.

                M 1 Reply Last reply Reply Quote 1
                • M
                  maniac @paul53 last edited by

                  @paul53 sagte in Tankfüllung überwachen / Notaus:

                  Ja, die den gleichen Wert hat wie der Ventil-Aktor, denn der wurde unmittelbar davor mit dem Wert der Variablen gesteuert.

                  Die Variable ventil ist der Sollzustand des Aktors. Der Aktor wird nur gesteuert, wenn Sollzustand != Istzustand (obere falls-Abfrage), um nicht unnötige Störungen zu erzeugen.

                  Jetzt habe ich es begriffen.
                  So scheint es jetzt im Test zu funktionieren.

                  c5d85378-ba09-4761-bbd0-52a33ad274f2-grafik.png

                  Vielen Dank..

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

                    @maniac sagte:

                    So scheint es jetzt im Test zu funktionieren.

                    Lass die Abfragen im 2-Punkt-Regler weg und mache es mit dem Telegramm besser so:

                    Blockly_temp.JPG

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

                      @paul53 sagte in Tankfüllung überwachen / Notaus:

                      @maniac sagte:

                      So scheint es jetzt im Test zu funktionieren.

                      Lass die Abfragen im 2-Punkt-Regler weg und mache es mit dem Telegramm besser so:

                      Blockly_temp.JPG

                      Das klappt nicht, bzw. nicht so wie geplant. Ich bekomme dann, jedesmal wenn sich der Wert ändert, eine Nachricht.

                      Das wird dann doch zuviel.
                      Abgesehen davon fliegen die Telegram eh später wieder raus.

                      Aber danke für den Hinweis.

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

                        @maniac sagte:

                        jedesmal wenn sich der Wert ändert, eine Nachricht.

                        Das kann nicht sein, sondern nur, wenn Ventil Sollzustand != Istzustand.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        952
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        blockly
                        3
                        10
                        582
                        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