Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

    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

    Blockly: Anhebung der Warmwassertemperatur bei PV_Überschuss

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

      OK.

      Meint ihr so!?

      999_umschaltung_ww_neu.jpg

      1 Reply Last reply Reply Quote 0
      • R
        RappiRN Most Active last edited by

        So in etwa, bin mir jetzt nicht ganz sicher bei dem unteren Stop, ob so, wie du den gelegt hast, oder in den timeout rein nach dem steuere.

        Auf jeden Fall sollte der timeout so immer sicher beendet werden. Probiers doch mal aus. 😄

        Enrico

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

          So hat es nicht funktioniert. Bei Bezug >500 wurde nicht wieder auf "unwahr" gewechselt.

          Habe es mal so geändert:

          999_umschaltung_ww_neu_1.jpg

          Das erste steuere nur um nach Script neustart den DP sicher auf false zu setzen.

          Jetzt mal ein paar Wolken abwarten.

          1 Reply Last reply Reply Quote 0
          • R
            RappiRN Most Active last edited by

            Du hast bei 500 auch ein größer als drin, dann klappt das nicht. Entweder machst du da ein kleiner als rein, oder du verwendest als Hysterese einen Wert von vielleicht kleiner als 1500 dann würde das Abschalten der Erwärmung auch wieder Sinn machen.

            Enrico

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

              Hi Enrico,

              Kann es sein das du was verwechselt? Bei den >500 schaue ich ja auf den Bezug (vom Netzbetreiber) und bei den >3800 auf meine Einspeisung. Oder habe ich noch einen Gedanken Fehler.

              Mirko

              1 Reply Last reply Reply Quote 0
              • R
                RappiRN Most Active last edited by

                Hast Recht, ich hab mich da verwirren lassen! :?

                Enrico

                1 Reply Last reply Reply Quote 0
                • R
                  RappiRN Most Active last edited by

                  Setz doch mal noch zwei debug-Blöcke ein. Einen in den timeout und einen einen unter falls (beim unteren Teil) um zu sehen, was bzw. ob da was passiert. Kannst du denn ausschließen, dass die Einspeisung in den 30sec timeout nicht wieder über 3800 gegangen ist? Wenn nicht, du weißt ja, debug-Blöcke wirken manchmal Wunder! 😄

                  Enrico

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

                    Gute Idee. Werde ich morgen machen.

                    Die 30sekunden sind jetzt nur zum testen. Will das eigentlich so auf 5 Minuten stellen damit das nicht hin und her schaltet.

                    Gesendet von iPhone mit Tapatalk Pro

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

                      Hallo wendy2702

                      In Deinem Blockly oben, hättest Du bei den Verzögerungen, eigentlich nur ein Häkchen bei "löschen falls lauft" setzen müssen.

                      Grüße

                      1 Reply Last reply Reply Quote 0
                      • R
                        RappiRN Most Active last edited by

                        Damit kannst du den Timer aber nicht stoppen, wenn der obere Trigger reagiert, oder sehe ich das falsch?

                        Enrico

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

                          @RappiRN:

                          Damit kannst du den Timer aber nicht stoppen, wenn der obere Trigger reagiert, oder sehe ich das falsch? `

                          Ich meinte dieses Blockly viewtopic.php?p=157237#p156903

                          So im "Überflug" sehe ich da keine Zusammenhänge der Verzögerungen.

                          Grüße

                          1 Reply Last reply Reply Quote 0
                          • R
                            RappiRN Most Active last edited by

                            Die Verzögerungen sollen verhindern, das bei kurzem Wolkendurchzug immer wieder hin- und hergeschaltet wird.

                            Der Zusammenhang ist in dem Fall die Variable, die mit dem einen Trigger auf wahr und mit dem anderen auf unwahr geschaltet werden soll.

                            Enrico

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

                              Hi,

                              Danke das ihr euch meinem Problem annehmt!

                              Richtig, mit den/der Verzögerung wollte ich das hin und her schalten verhindern wenn mal kurz ne Wolke kommt.

                              Eigentlich hätte ich es irgendwann gerne so das der Wert Einspeisung z.B. Für 3 minuten größer als 3800 ist und dann erst die Variable auf „true“ gesetzt wird und damit WW Temperatur auf 60 Grad.

                              Andersherum dann wenn der Wert für Bezug z.B: länger als 4 Minuten >500 die variable wieder auf „false“ und damit WW Temperatur auf 45 Grad.

                              Kann ich das mit Timeout / Verzögerungen erreichen oder erfordert das komplexere Programmierung?

                              Danke und Gruß

                              Mirko

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

                                Das sollte per einfachen Timeouts gehen, bin mir aber nicht sicher wie man das Überprüfen auf existierenden Timeout per Blockly macht. Eventuell musst du doch auf JS zurückgreifen:

                                Trigger Einspeisung > 3800:
                                    Wenn timeout1 nicht läuft UND Variable == true:
                                        setze timeout1 (3 Minuten):
                                            (optional: Wenn Einspeisung immer noch > 3800 => ) Variable auf false
                                
                                Trigger Einspeisung < = 3800:
                                    Lösche Timeout1
                                
                                Trigger Bezug > 500:
                                    Wenn timeout2 nicht läuft UND Variable == false:
                                        setze timeout2 (4 Minuten):
                                            (optional: Wenn Bezug immer noch > 500 => ) Variable auf true
                                
                                Trigger Bezug <= 500:
                                    Lösche timeout 2            
                                
                                
                                1 Reply Last reply Reply Quote 0
                                • wendy2702
                                  wendy2702 last edited by

                                  Danke.

                                  Wie man einen laufenden Timer prüft weiß ich weder in Blockly noch in JS :mrgreen: :roll:

                                  Verstehe ich das richtig das bei einem Timeout auch nach/während Ablauf des Timeouts nochmal geschaut wird ob die Bedingung erfüllt wird?

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

                                    @wendy2702:

                                    Wie man einen laufenden Timer prüft weiß ich weder in Blockly noch in JS :mrgreen: :roll: `
                                    Bei Blockly geht das leider nur "von-hinten-durch-die-Brust-ins-Auge".

                                    Aber es geht mit Hilfsvariablen und Funktionen.

                                    Das Prinzip sieht so aus.
                                    147_beispiel.png

                                    ! <xml xmlns="http://www.w3.org/1999/xhtml"><block type="controls_if" id="1`C*nVG*,{-|Lp?VmSwx" x="-462" y="88"><mutation else="1"></mutation> <value name="IF0"><block type="logic_compare" id="Plk9G8)TLiPXC@eABo_C"><field name="OP">EQ</field> <value name="A"><block type="variables_get" id="+5X]9~{)G=:u.i(=A!r?"><field name="VAR">Timer1_run</field></block></value> <value name="B"><block type="logic_boolean" id="B?J7s{_=*DYG1=a|Z`*X"><field name="BOOL">TRUE</field></block></value></block></value> <statement name="DO0"><block type="procedures_callnoreturn" id="Xt;tr~EEGP7Z!qY/_,*="><mutation name="Timer1_aus"></mutation></block></statement> <statement name="ELSE"><block type="procedures_callnoreturn" id="@TNnC-{V5eFmpW1M#6I]"><mutation name="Timer1_an"></mutation></block></statement></block> <block type="procedures_defnoreturn" id="rr(PCWc?1ajHH/.cj=dP" x="-662" y="213"><field name="NAME">Timer1_an</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"><block type="comment" id="6Wiz2h{]@5Qt~dZeq/1c"><field name="COMMENT">Nicht unbediengt notwendig</field> <next><block type="comment" id="*B#%vZhKWB#YvyWGb@_8"><field name="COMMENT">aber zur Sicherheit vorher stoppen</field> <next><block type="procedures_callnoreturn" id="Ic_aL)K0]jz2|(9dCaAi"><mutation name="Timer1_aus"></mutation> <next><block type="comment" id="+2h2v5.9*tq{X[og(Jt:"><field name="COMMENT">Hier Timer starten</field> <next><block type="variables_set" id="VAOo8~nNu.wCN,f#_-.v"><field name="VAR">Timer1_run</field> <value name="VALUE"><block type="logic_boolean" id="#ziRr0t*:Tgk#;KIdJHs"><field name="BOOL">TRUE</field></block></value> <next><block type="timeouts_settimeout" id=".MiD.cWd79}v-vvIkfW*"><field name="NAME">Timer1</field> <field name="DELAY">1000</field> <field name="UNIT">ms</field> <statement name="STATEMENT"><block type="comment" id="rTm5sz;*zDYM[3A?WQZX"><field name="COMMENT">Hier irgendwas machen</field> <next><block type="comment" id="g,x3tK[DUIw+#u6,S!L-"><field name="COMMENT">Danach die die Timer Hilfsvariable auf unwahr</field> <next><block type="variables_set" id="nDg,=+3j|+u}r%mES%Oc"><field name="VAR">Timer1_run</field> <value name="VALUE"><block type="logic_boolean" id="cMECEt0RqU-o5N|uq.WK"><field name="BOOL">FALSE</field></block></value> <next><block type="comment" id="qC1UF]Y6BmOxU(8Gy[)v"><field name="COMMENT">ACHTUNG!!!!!!!</field> <next><block type="comment" id="idALyk(O6L4;7Z#,)4lu"><field name="COMMENT">Dieser innere Teil des Timers wird NICHT</field> <next><block type="comment" id="rs%y:7?bmTYs3dD:AYj?"><field name="COMMENT">ausgeführt wenn der Timer von "aussen"</field> <next><block type="comment" id="wdC+0L;(Uf^Ees{GtRy/"><field name="COMMENT">gestoppt wird.</field> <next><block type="comment" id="vJ@bN3v7UO;d#3VpPjcl"><field name="COMMENT">Deshalb alles in Funktionen packen!</field></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></statement></block> <block type="procedures_defnoreturn" id="MlKJiSJ?rI=ucz^r9BWt" x="-262" y="263"><field name="NAME">Timer1_aus</field> <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment> <statement name="STACK"><block type="comment" id=",!NuTDD5kay3}E{OA)@_"><field name="COMMENT">Timer stoppen und Hilfsvariable auf false</field> <next><block type="timeouts_cleartimeout" id="7*IIi^GXEuB0x3kLF|l8"><field name="NAME">Timer1</field> <next><block type="variables_set" id="49xT4jIbI_FW|=,g|=Yq"><field name="VAR">Timer1_run</field> <value name="VALUE"><block type="logic_boolean" id="tIBJ3x9-s@UPoQ|Yv~to"><field name="BOOL">FALSE</field></block></value></block></next></block></next></block></statement></block></xml> !

                                    Grüße

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

                                      :shock:

                                      Danke!

                                      Aber an welche Stelle käme den jetzt da was von meinem Script rein?

                                      Müsste ich hier

                                      999_planlos.jpg

                                      Meine Abfrage z.B. der Einspeisung einfügen ?

                                      Sorry… ich überblicke das Gesamtkonzept irgendwie noch nicht. :oops:

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

                                        @wendy2702:

                                        Aber an welche Stelle käme den jetzt da was von meinem Script rein?

                                        Sorry… ich überblicke das Gesamtkonzept irgendwie noch nicht. :oops: `

                                        Hauptsächlich geht es um die Möglichkeit in Blockly abfragen zu können ob in Timer läuft oder nicht.

                                        Ich habe mal ein kleines Beispiel von Dir genommen.

                                        In diesem Beispiel wäre der Umstand nicht notwendig, soll aber das Prinzip verdeutlichen.

                                        Hier Dein Beispiel.
                                        147_umschaltung_ww_neu_1.jpg

                                        Hier auf Timer-Abfrage angepasst. (Deine Datenpunkte habe ich leider nicht)
                                        147_beispiel.png

                                        Grüße

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

                                          @rantanplan:

                                          Ich habe mal ein kleines Beispiel von Dir genommen.

                                          In diesem Beispiel wäre der Umstand nicht notwendig, soll aber das Prinzip verdeutlichen. `

                                          Ok.

                                          Das bedeutet das ich die Abfrage Timer läuft oder Nicht eigentlich für meine Anforderung nicht zwingend benötige!?

                                          Wie löse ich dann das Überprüfen z.B. der Einspeisung >3800 für Zeitraum x bevor Variable auf "true" ?

                                          Oder habe ich dich falsch verstanden?

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

                                            @wendy2702:

                                            Das bedeutet das ich die Abfrage Timer läuft oder Nicht eigentlich für meine Anforderung nicht zwingend benötige!? `

                                            Jaein.

                                            Ich habe jetzt nicht Deine ganze Anforderung im Blick.

                                            Ob Du wissen musst ob ein Timer läuft oder nicht liegt in Deinem ermessen.

                                            Du triggerst den Datenpunkt "Wirkenergie_Bezug" und wenn der Wert größer 500 ist, startest Du einen Timer von 30 Sek.

                                            Gehen wir mal davon aus, dass der "Wirkenergie_Bezug" sich jede Sekunde ändert und größer 500 ist.

                                            Problem 1 bei Timern.

                                            Timer starten OHNE ihn vorher zu beenden.

                                            1. Start 30 Sek.

                                            2. Start 30 Sek.

                                            3. Start 30 Sek. (bleiben wir bei 3x starten in 3 Sek.)

                                            NUN LAUFEN DREI TIMER AB.

                                            nach 30 Sek. "Einspeisung" auf unwahr

                                            nach 31 Sek. "Einspeisung" auf unwahr

                                            nach 32 Sek. "Einspeisung" auf unwahr

                                            Problem 2 bei Timern.

                                            Timer starten UND ihn vorher beenden.

                                            10:00:30 TimerStart 30 Sek. (der Timer sollte nun um 10:01:00 enden)

                                            10:00:31 TimerStop / TimerStart (jetzt endet der Timer um 10:01:01)

                                            10:00:32 TimerStop / TimerStart (jetzt endet der Timer um 10:01:02)

                                            usw., usw…......

                                            Das heißt wenn ein Timer gestoppt und wieder gestartet wird, verschiebt sich das Timer-Ereignis immer weiter nach hinten.

                                            Im schlimmsten Fall tritt das Timer-Ereignis NIE ein. (je nach dem was wie oft getriggert wird.)

                                            Wenn man nun vorher abfragen kann ob ein Timer bereits aktiv ist, kann man das verhindern.

                                            10:00:30 TimerStart 30 Sek. (Variable Aktiv=wahr)

                                            10:30:31 Falls Aktiv=wahr mache NICHTS

                                            10:30:32 Falls Aktiv=wahr machte NICHTS

                                            ...

                                            ...

                                            10:01:00 Timer-Ereignis wird zur vorgesehenen Zeit ausgeführt.

                                            10:01:01 Das Spiel fängt von vorne an.

                                            @wendy2702:

                                            Wie löse ich dann das Überprüfen z.B. der Einspeisung >3800 für Zeitraum x bevor Variable auf "true" ? `
                                            Das sagt mir jetzt nichts.

                                            Vielleicht hilft Dir mein Erklärungsversuch weiter.

                                            Grüße

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            844
                                            Online

                                            31.9k
                                            Users

                                            80.2k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            33
                                            2865
                                            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