Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Bier maischen Script mit Blockly

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    Bier maischen Script mit Blockly

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

      So, ich habe mal ein wenig rumgebastelt. Mein Script sieht jetzt so aus:

      12588_script.jpg

      Step 1: Kessel aufheizen für 10 Minuten zwischen 55°C und 56°C

      Step 2: Kessel weiter aufheizen auf knappe 72°C

      Leider funktioniert dieser Zeitplan nicht, wie ich es gerne hätte. Ich komme allerdings nicht drauf, wie ich es anders einstellen soll.

      Ich habe auch jetzt einmal in das Script des Räucherofens reingeschaut, aber hier wird mit Variablen gearbeitet und ich finde keine Erklärung, wie zum Beispiel die Variable "Tagesminuten" auch tatsächlich als Minuten berechnet werden.

      Ich möchte einfach nur, dass das Script meinen Heizstab antriggert und für eine bestimmte Zeit eine Temperatur halten lässt und nach Ablauf der Zeit auf die nächste Temperaturstufe hochheizt. Das kann doch eigentlich nicht so schwer sein, bzw. bin ich tatsächlich zu blöde dafür? (Bitte hier keine ehrlichen Antworten posten, vielen Dank… 😄 )

      Gibt es noch eine Rettung für mein Projekt?

      1 Reply Last reply Reply Quote 0
      • J
        Jan1 last edited by

        Trigger im Trigger ist eben ne blöde Idee :lol:

        Der Interne Trigger wird nur aktiv, wenn der externe aktiv ist, somit wird der Zeitplan nur dann aktiv, wenn sich die Temperatur ändert und ist nutzlos.

        Wobei der Zeitplan eh sinnlos ist, da er die gesamte Regelung über die Temperatur durcheinander bringen würde. Das regelt sich doch selber und muss nicht alle 10 oder 30 Minuten noch mal aktiviert werden. Beispiel, der Zeitplan läuft gerade nicht, die Heizung ist aber an und Deine Maische bei 90°, dann schaltet da auch nix ab und Du kannst das Zeug entsorgen :lol:

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

          @hanzwurzt:

          Ich möchte einfach nur, dass das Script meinen Heizstab antriggert und für eine bestimmte Zeit eine Temperatur halten lässt und nach Ablauf der Zeit auf die nächste Temperaturstufe hochheizt. `

          Mangels Blockly hier in Textform:

          [ Variable erstellen: Zieltemperatur mit Wert 55 ]
          [ Timeout (10 Minuten) ]
              [ Zieltemperatur setzen auf 72 ]
          
          [ Falls Objekt Thermometer geändert ]
              [ Falls Wert < Zieltemperatur, dann Funke1 => wahr]
              [ Sonst falls Wert > Zieltemperatur + 1, dann Funke1 => unwahr ]
          
          
          1 Reply Last reply Reply Quote 0
          • H
            hanzwurzt last edited by

            Also, vielen Dank für die Antworten,

            leider scheine ich tatsächlich zu blöde dafür zu sein. :? @AlCazone: Wenn ich es ganz genau nach dem baue, wie du gesagt hast, würde es ungefähr so aussehen:
            12588_script.png

            Funktioniert aber auch nicht. Der ganze Krempel heizt einfach in einem durch auf die endgültige Temperatur von 55°C (diesmal in echter 5- stelliger Zahl angegeben, wie sie auch vom Thermometer weitergegeben wird).

            Und nach 15 Minuten passiert nichts mehr. Eigentlich sollte er ja die 35°C für 10 Minuten halten…

            WAHHHH, ich werde noch komplett irre mit dem Kram. So schwer kann das doch eigentlich nicht sein...GRMBL 😢

            Hat noch jemand eine Idee? Was mache ich falsch? Irgendwo habe ich einen Denkfehler... 😞

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

              Nicht so viel auf einmal.

              Erst einmal den Cron und die Variablen weg lassen.

              Versuche es wie im Bild.

              Wenn du unter 55 Grad bist wird der Funke eingeschaltet.

              Über 57 Grad schaltet der Funke aus.

              Das sollte erst einmal klappen, dann weiter.

              Mach dir mal Gedanken was du haben willst, ohne Cron.

              Stufe 1 gesteuert über Thermostat.

              An bei kleiner 55 Grad.

              Aus bei größer 57 Grad.

              Stufe 2 Aufheizen ?

              Datenpunkt aufheizen anlegen,

              wenn Datenpunkt aufheizen ist kleiner 72 Grad Funke weiter ein.

              Abschaltung Funke bei 73 Grad.
              5230_hanswurst_v1.jpg

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

                @hanzwurzt:

                Funktioniert aber auch nicht. Der ganze Krempel heizt einfach in einem durch auf die endgültige Temperatur von 55°C (diesmal in echter 5- stelliger Zahl angegeben, wie sie auch vom Thermometer weitergegeben wird).

                Und nach 15 Minuten passiert nichts mehr. Eigentlich sollte er ja die 35°C für 10 Minuten halten… `
                Ahh ok, ich sehe den Fehler…

                Die Zieltemperatur wird 10 Minuten nach Skriptstart auf 55 gesetzt. Du willst aber 10 Minuten nach Erreichen der ersten Stufe die Zieltemp auf 55 setzen.

                Dazu musst du nach dem ersten Erreichen der Zieltemperatur einmalig den Timer starten.

                Mangels Blockly die nötigen Änderungen in Textform:

                - Timeout zu Beginn raus.
                - Dafür eine weitere Variable => Stufe1Erreicht = false
                - In den Zweig (Falls Objekt geändert) eine weitere Bedigung, am besten vor oder nach der aktuellen:
                  Falls (Wert >= Zieltemperatur) UND (Stufe1Erreicht  == false) => 
                    Stufe1Erreicht = true  
                    Timeout 10 Minuten => Zieltempratur auf 55°
                
                
                1 Reply Last reply Reply Quote 0
                • H
                  hanzwurzt last edited by

                  Also, wieder erst einmal vielen Dank für die Antworten. Ich habe es jetzt einmal so gemacht:

                  12588_screen.png

                  Aber dann passiert rein gar nichts.

                  So langsam kriege ich hier echt die Motten. Es kann doch nicht sein, dass das so schwer ist… 😞

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

                    Boah was verkaspert.

                    Auf die schnelle,

                    Bild anbei.
                    5230_io-v3.jpg

                    1 Reply Last reply Reply Quote 0
                    • H
                      hanzwurzt last edited by

                      OK, vielen Dank Ralla,

                      leider funktioniert das so auch nicht, da ich den Block mit "Stufe1 erreicht = wahr" nicht in den Block einfügen kann wie auf deiner Grafik angezeigt.

                      12588_screen2.png

                      Ich hatte es ja soweit, dass das Aufheizen bis zu einer bestimmten Stufe funktioniert hat. Das Halten der Temperatur auch. Nur das Ganze an eine gewisse Zeit zu binden, ist der große Knackpunkt.

                      Also, es soll eine Temperatur von 30000 angefahren werden.

                      Dann 30000 für eine zeit von 10 Minuten halten.

                      Dann auf 55000 aufheizen.

                      Dann wieder für 30 Minuten halten.

                      danach wieder aufheizen usw.

                      Ein Cronjob kann das nicht. Ein Timeout scheint das auch irgendwie nicht richtig zu triggern, jedenfalls nicht dort, wo er sitzt.

                      Was gibt es noch für Möglichkeiten?

                      [Edit]: Sorry, habe nicht gesehen, dass du deinen Beitrag schon editiert hast. Ich schau da aber erst morgen mal rein. Muss jetzt in die Heia. Aber vielen lieben Dank für deine/ eure Mühen…

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

                        Ja ok Zeit,

                        nimm dir ein Cron, den führst du jede Minute aus.

                        Im Cron zählst du eine Variable "Minute" hoch.

                        Diese schreibst du in einen Datenpunkt ( DP ).

                        Immer +1 die Var.

                        Setze die Var alle 1440 auf 0, also alle 24 Stunden oder so.

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

                          Datenpunkt Minute.
                          5230_datenpunkt_minute.jpg
                          5230_datenpunkt.jpg

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

                            @hanzwurzt:

                            Was gibt es noch für Möglichkeiten? `
                            Les dir meinen Post bitte mal genau durch. Da steht alles drin, welche Änderungen du an deinem vorhergehenden Skript machen musst.

                            Deine letzten beiden Versuche haben leider gar nichts mit dem zu tun, was ich beschrieben habe. Der 2. Versuch kommt näher dran, aber es fehlen erstens Blöcke aus dem Skript, das du nur modifizieren solltest, und zweitens fliegen Blöcke im Nirvana rum, die eigentlich innerhalb der Logik-Blöcke sein sollten.

                            Edit: Hier das Bild für eine Stufe. Der Abschnitt mit dem Timeout muss in die Klammer bei "mache", das war mir in Photoshop gerade zu umständlich.
                            1097_unbenannt-1.png
                            Für weitere Stufen muss die Bedingung, die die neue Zieltemperatur festlegt, etwas umgestrickt werden.

                            Bevor ich dir das auch noch bastele, bitte ich dich, meinen Post nochmal aufmerksam zu lesen, dein altes Skript genau anzuschauen und nachzuvollziehen, was wo geändert wurde.

                            Halbherzig lesen, ganz was anderes umsetzen und dann meckern dass es nicht geht, hilft niemand!

                            Wenn du soweit bist, bitte alle Details: Wie viele Stufen? Wird zwischendrin abgekühlst oder nur weiter geheizt?

                            1 Reply Last reply Reply Quote 0
                            • H
                              hanzwurzt last edited by

                              Also, zuerst einmal vielen Dank für die Anregungen.

                              Ich habe das Script anhand deiner Ideen Ralla, abgeändert. Erst einmal so:

                              12588_script2.jpg

                              Leider ohne den erwarteten Erfolg. Nach diesem Script heizt der Heizstab das Wasser bis zu einer Endtemperatur von 40°C in einem durch auf.

                              @AlCalzone: Das Bild in dem die Blöcke nicht verbunden waren, war eigentlich nur zur Verdeutlichung gedacht, weil sich die Blöcke nicht so verbinden ließen, wie ich es aus deiner Beschreibung gelesen habe. Es tut mir leid, wenn ich mich so blöd anstelle, aber das hier ist absolutes Neuland für mich.

                              Ich habe es jetzt so gebastelt, wie du vorgeschlagen hast und dieses Script funktioniert:

                              12588_script.jpg

                              Es steuert dein Heizstab so an, dass die Temperatur erst auf 20°C hochgefahren wird, diese dann für 10 Minuten hält und nach Ablauf der 10 Minuten die Temperatur auf 30°C hochfährt. So weit SUPER!! Vielen Dank dafür!!! 🙂

                              Ab hier wird das Script im Prinzip für jede Art von Bier etwas unterschiedlich. Als Beispiel:

                              Für ein Weizenbier möchte ich mehrere Temperaturstufen durchfahren:

                              1. Einmaischen bei 45°C halten für 10 Minuten

                              2. Eiweißrast bei 55°C halten für 15 Minuten

                              3. Maltoserast bei 63°C halten für 60 Minuten

                              4. Verzuckerungsrast bei 72°C für 30 Minuten

                              5. Abmaischen bei 78°C

                              Für andere Biere muss ich andere Stufen durchfahren. Eine helles Lager würde ich wahrscheinlich so machen:

                              1. Einmaischen bei 55°C halten für 10 Minuten

                              2. Kombirast bei 68°C für 60 Minuten

                              3. Abmaischen bei 78°C

                              Dazwischen gibt es verschiedene Variationen, die eine individuelle Anpassung vor jedem Brauvorgang unerlässlich macht.

                              Das bedeutet, ich muss das Script ab diesem Punkt so gestalten, dass ich hier skalierbar bleibe und etwaige Stufen ein oder ausbauen kann, ohne Abhängigkeiten zu beeinträchtigen.

                              Leider ist es nicht so ganz einfach, ab hier weiterzubauen. Ich habe über die letzten Tage viele verschiedene Kombinationen ausprobiert, aber keine hat den gewünschten Erfolg begracht. Ich habe dann auch mit kopieren einzelner Blöcke experimentiert:

                              12588_script3.jpg

                              aber anscheinend passiert dann genau das. Das ganze Script funktioniert dann nicht mehr so, wie ich es eigentlich möchte. Anscheinend werden hier dann Abhängigkeiten überschrieben.

                              Also noch einmal vielen vielen Dank für eure Gedult und entschuldigt bitte mein Unvermögen, mich in diese Dinge reinzuversetzen, wie es nötig wäre.

                              Wenn ihr mir hier noch einmal einen Schubs geben könntet, wäre das wirklich super…. 😉

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

                                schubs,

                                Baue dir ein Grundgerüst / script für Bierbrauen alle Sorten mit Variablen.

                                Var anlegen für einmaischen, kombirast, abmaischen usw.

                                Die Variablen definierst du dann für Hell oder Weizen Bier usw.

                                Also im Prinzip Bierbrauen alle ein und die Variablen besetzen mit den

                                gespeicherten Werten für Hell oder Weizen oder so.

                                z.B. Weizen aktiv setze Var

                                einmaischen auf x

                                kombirast auf x

                                abmaischen auf x

                                Beispielbild anbei.

                                Ralla
                                5230_bier_v2.jpg
                                5230_bier_v1.jpg

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

                                  schubs 2,

                                  Hauptprogramm " Bier alle " etwa so,

                                  Vorbesetzen der Biere etwa so,

                                  siehe Bilder.

                                  Probiere es, viel Arbeit, fang mit einer Biersorte an.

                                  Das wird ein etwas größeres Programm.

                                  Grundbausteine haste jetzt.

                                  Die Gestaltung des Hauptprogramms "Bier alle" muß für alle Biersorten gleich sein.

                                  Kriegste hin.

                                  Viel Spass 😉
                                  5230_bier_haupt_prg.jpg
                                  5230_biersorten_var_vorbestzen.jpg

                                  1 Reply Last reply Reply Quote 0
                                  • H
                                    hanzwurzt last edited by

                                    Ach du meine Güte, ist das viel Zeug, Wahnsinn. :shock:

                                    Vielen Dank, Ralla. Da habe ich aber was zu basteln. Mal sehen, ob ich es umsetzen kann.

                                    Echt Toll. Danke dafür. 🙂

                                    1 Reply Last reply Reply Quote 0
                                    • H
                                      hanzwurzt last edited by

                                      Also, ich habe das jetzt mal wie folgt zusammengeklöppelt:

                                      12588_1.jpg
                                      12588_2.jpg
                                      12588_3.jpg
                                      12588_4.jpg

                                      Ausprobieren kann ich das heute nicht mehr, Küche ist belegt. Nichtsdestotrotz stellen sich mir folgende Fragen:

                                      Wenn ich in den Variablen die Zeiten definiere, woher weiß das Script, dass es sich um Minuten handelt und nicht um Stunden, Sekunden oder Kekse? Müsste ich die nicht auch irgendwo definieren?

                                      Wenn das Script erkennt, dass es sich um Minuten handelt, wozu müsste ich dann einen Timeout setzen?

                                      Wird der nächste Sprungpunkt immer erst nach Ablauf des vorherigen angesteuert?

                                      Wenn es die Zeit zulässt, lasse ich es morgen mal durchlaufen und gebe dann Rückmeldung.

                                      Vielen Dank bis hierher schonmal.

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

                                        Morgen mehr.

                                        Nachtrag 14.01

                                        versuche erst einmal nur mit Hellbier und Einmaischen.

                                        Der Rest wenn läuft ist dann nur Copy und Paste.

                                        Das Problem im Bild ist der Timeout.

                                        Wenn Timeout aktiv wird die Heizungsregelung < 55 Grad >55 Grad inaktiv bzw

                                        die Heizung bleibt an oder aus. Also sinkt / steigt die Temp wärend des Timeouts

                                        unkontrolliert.

                                        Wir wollen aber das wenn der Timeout läuft die Temp gehalten wird auf 55 Grad.

                                        Ich Versuche das mal heute Abend mit einem Intervall und Runterzähler zu lösen.

                                        Was für ne Aufgabe, Puh 😉

                                        Wir nähern uns langsam.

                                        Kriegen wir gemeinsam hin.

                                        Bild reiche ich heute Abend nach.
                                        5230_bier_haupt_v15.jpg

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

                                          @hanzwurzt:

                                          aber anscheinend passiert dann genau das. Das ganze Script funktioniert dann nicht mehr so, wie ich es eigentlich möchte. Anscheinend werden hier dann Abhängigkeiten überschrieben. `

                                          Du hast mittig zwischen deinen Abschnitten für die beiden Stufen zwei Blöcke, in denen du die Zieltemperatur änderst. Diese werden jedes Mal, wenn der Fühler einen neuen Wert meldet, ausgeführt und überschreiben die Zieltemperatur. Das sollte wie ich das verstehe aber nur dann passieren, wenn du eine Stufe für längere Zeit gehalten hast und die nächste angefahren werden soll. Also innerhalb eines der Timeout-Blöcke einer Stufe.

                                          Zum "flexiblen Gerüst":

                                          Verdammt sind das viele Stufen! Ich persönlich (mit etwas mehr Erfahrung) würde Blockly dafür sein lassen und auf JS wechseln.

                                          Dort kannst du dir erstens (geht auch in Blockly) Funktionen deklarieren, z.B. für "Temperatur halten" oder "heizen".

                                          Zweitens geht die Ablauf-Steuerung dort sehr schön, wenn man Promises verwendet. Das ist zwar recht fortgeschritten, was die Programmierung angeht, die Definition des Ablaufs geht aber sehr schön (siehe unten). Ich könnte dich da gerne unterstützen.

                                          Ein Dummy-Skript (ohne Funktionalität) könnte in etwa so aussehen:

                                          function heizen(zielTemperatur)  {
                                            // TODO: Gibt Promise zurück, der erst nach Erreichen der Zieltemperatur fulfilled.
                                          }
                                          
                                          function halten(dauer) {
                                            // TODO: Gibt Promise zurück, der nach "dauer" Minuten fulfilled.
                                          }
                                          
                                          // Brau-Ablauf definieren:
                                          Promise.resolve()
                                            .then(() => heizen(35000)) // Stufe 1
                                            .then(() => halten(10))
                                            .then(() => heizen(55000)) // Stufe 2
                                            .then(() => halten(20))
                                            // ...
                                          ;
                                          
                                          

                                          Diesen Ablauf kannst du dir dann auch wieder in Funktionen packen und nur noch aufrufen, z.B.

                                          weizenbier().then(() => /* Sprachausgabe: Prost */)
                                          
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • Ralla66
                                            Ralla66 Most Active last edited by

                                            Da hat AlCalzone recht,

                                            das geht besser in JS.

                                            Selbst da nicht ganz ohne.

                                            Du mußt ja alles betrachten Temp, Zeiten, Halten ,Vorheizen usw. und das beim Einmaischen, Kombirast usw.

                                            Mit JS aufwendig, mit Blockly sehr aufwendig.

                                            Mal eben geht das nicht bei deinen Anforderungen.

                                            Hinweis, das Blocky Bild ist nur ein Vorschlag, nicht getestet und Verbesserungswürdig.

                                            Eben schnell erstellt.

                                            Da Spass an der Freude.

                                            Betrachtet wurde nur, Hellbier, Einmaischen und Runterzähler.

                                            Damit du weißt was in Blockly auf dich zukommt wenn Mann wie ich kein JS kann.

                                            Kommentare habe ich so gut es ging eingefügt.

                                            Versuche mal zu erkunden was passiert wenn Hellbier ist 0 oder 1.

                                            Viel Spass

                                            :mrgreen:
                                            5230_hellbier_fertig_v1.jpg

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            734
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            101
                                            6716
                                            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