Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Blockly: Zeitextrapolation

    NEWS

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Blockly: Zeitextrapolation

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

      Hallo zusammen

      Vielen Dank erstmal an alle, die so tatkräftig hier im Forum mitarbeiten - ich lese schon eine ganze Weile mit, bin aber (als Anfänger) an meine Grenzen gestoßen und hoffe auf Eure Hilfe.

      Situation:
      Ich betreibe eine Wärmepumpe (Stiebel Eltron), die neben dem Heizbetrieb auch Warmwasser erzeugt.

      Für die WP gibt es in iobroker einen entsprechenden Adapter, entsprechende Objekte zum Abprüfen des jeweiligen Betriebsstatus (z.B. WARMWASSERBEREITUNG) stehen mir zur Verfügung.

      An anderer Stelle werte ich diese auch aus, und habe mir damit auch schon Visualisierungen gebaut.

      Das klappt alles wunderbar.

      Die WP produziert warmes Wasser, aber es kann immer einmal sein, dass nach einen Bad oder einer Dusche nicht ausreichend warmes Wasser zur Verfügung steht, damit dieses dann für einen zweiten Duschvorgang reicht (am Ende wird es kalt 😉 )

      Ich habe mir daher eine Visualisierung gebaut, auf der ich gerne anzeigen würde, wie lange es dauert, bis die vorgegebene WW-SOLL-Temperatur erreicht wird (quasi eine Extrapolation aus Werten, die ich von der WP bekomme (da diese das nicht selber berechnen kann)).

      Da die WP nicht ständig WW produziert, habe ich mir eigene Userobjekte in iobroker angelegt (numerische Werte, Booleans), mit denen ich die Zustandsänderungen abprüfen kann.

      Gegeben sind:
      PROGNOSE_DAUER_WARMWASSERBEREITUNG (numerisch, Userobjekt):
      Das Userobjekt wird im Moment nur von mir "missbraucht", um dort einen Wert (Sekunden) abzuspeichern, mit dem ich dann weiterrechnen werde. Letztlich ist das der Wert in Sekunden, der extrapoliert wurde.

      SEKUNDEN_AB_START (Variable in Blockly)
      Ich habe in Blockly diese Variable geschaffen, damit ich hier rein die Sekunden ausgehend vom Start der Warmwasserbereitung zwischenspeichern kann.

      WW_SOLL_MAX (numerisch, Userobjekt)):
      Zielwert in °C für die WW-Bereitung (der Wert errechnet sich aus der vorgegebenen WW-SOLL-Temperatur in der WP und der Hysterese (2 K). Hier wird einfach WW-SOLL + Hysterese gerechnet, was dann WW_SOLL_MAX ergibt.

      TEST_BOOL (boolean, Userobjekt):
      Repräsentiert den Schalter, welcher bei der WW-Produktion der WP auf TRUE steht; ich simuliere das durch manuelles Setzen des Schalters; im fertigen Script wird der Schalter dann auf den "echten" gesetzt.

      TEST_WERT (numerisch, Userobjekt).
      Repräsentiert den Wert der aktuellen WW-IST-TEMPERATUR.
      Zu erwähnen ist, dass das Script noch lange nicht fertig ist, ich aber hier nun nicht mehr weiterkomme.

      Aufgabenstellung:
      Das Script soll die Änderung der Variablen TEST_BOOL abfangen und prüfen, ob diese WAHR ist (dann befindet sich die WP im Betriebsmodus WARMWASSERBEREITUNG.

      Ist der Zustand WAHR, soll eine Schleife ausgeführt werden, die jede Sekunde den Wert der Variablen SEKUNDEN_AB_START um 1 erhöht.

      Damit sollen dann die Sekunden für die Extrapolation ermittelt werden.

      Ziel ist, dass ich aus einem zu ermittelnden Temperaturhub pro Zeiteinheit dann ermitteln kann per Dreisatz, wie viele Sekunden es dauern wird, bis WW_SOLL_MAX erreicht werden (das lässt sich quasi nur dynamisch "schätzen").

      Die Ermittlung des Temperaturhubs ist hier noch nicht enthalten - das kommt noch (eins nach dem anderen 😉 )

      Die Schleife soll jede Sekunde solange ausgeführt werden, bis TEST_WERT gleich oder größer WW_SOLL_MAX ist (dann hört die WP mit der Produktion von Warmwasser auf).

      Danach soll der Wert der Variablen SEKUNDEN_AB_START in das Objekt PROGNOSE_DAUER_WARMWASSERBEREITUNG geschrieben werden.

      Und hier steckt irgendwo der Fehler.

      Ich habe hier schon mehrere Varianten versucht, und auch PROGNOSE_DAUER_WARMWASSERBEREITUNG beim Start mit 0 initialisiert; nichts will funktionieren.

      Das Ergebnis ist immer, dass der Trigger (quasi der Start der WW-Produktion) nicht erkannt wird und nichts passiert, oder aber, dass dieser erkannt wird und PROGNOSE_DAUER_WARMWASSERBEREITUNG zwar 1 x Sekunde aktualisiert wird (man sieht den Wert "aktualisieren", aber immer nur 0 beinhaltet.

      Ich befürchte, es ist ein Anfängerfehler ... aber ich bin mit meinem Latein am Ende.

      Vielleicht kann jemand von Euch helfen?

      Einen Screenshot des Blockly-Aufbaus gibt es hier:

      210201_blockly_prognose_ww_bereitung.PNG

      Der Code schaut so aus:

      var SEKUNDEN_AB_START, Intervall;
      
      
      setState("0_userdata.0.LWZ.PROGNOSE_DAUER_WARMWASSERBEREITUNG"/*PROGNOSE_DAUER_WARMWASSERBEREITUNG*/, 0, true);
      SEKUNDEN_AB_START = 0;
      
      on({id: '0_userdata.0.LWZ.TEST_BOOL', change: "ne"}, function (obj) {
        var value = obj.state.val;
        var oldValue = obj.oldState.val;
        if (true) {
          Intervall = setInterval(function () {
            while (!(getState("0_userdata.0.LWZ.TEST_WERT").val > getState("0_userdata.0.LWZ.WW_SOLL_MAX").val)) {
              SEKUNDEN_AB_START = (typeof SEKUNDEN_AB_START == 'number' ? SEKUNDEN_AB_START : 0) + 1;
              setState("0_userdata.0.LWZ.PROGNOSE_DAUER_WARMWASSERBEREITUNG"/*PROGNOSE_DAUER_WARMWASSERBEREITUNG*/, SEKUNDEN_AB_START, true);
            }
          }, 1000);
        }
      });
      
      //JTNDeG1sJTIweG1sbnMlM0QlMjJodHRwcyUzQSUyRiUyRmRldmVsb3BlcnMuZ29vZ2xlLmNvbSUyRmJsb2NrbHklMkZ4bWwlMjIlM0UlM0N2YXJpYWJsZXMlM0UlM0N2YXJpYWJsZSUyMGlkJTNEJTIya3hHQmNUdXY2ISU0ME8lM0ZZYTElN0MlMkNGfiUyMiUzRVNFS1VOREVOX0FCX1NUQVJUJTNDJTJGdmFyaWFibGUlM0UlM0N2YXJpYWJsZSUyMHR5cGUlM0QlMjJpbnRlcnZhbCUyMiUyMGlkJTNEJTIySW50ZXJ2YWxsJTIyJTNFSW50ZXJ2YWxsJTNDJTJGdmFyaWFibGUlM0UlM0MlMkZ2YXJpYWJsZXMlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ1cGRhdGUlMjIlMjBpZCUzRCUyMkFyJTI1bTclM0JpKS5lVlolNURRRVglMjUoTnklMjIlMjB4JTNEJTIyLTMzOCUyMiUyMHklM0QlMjItNDYyJTIyJTNFJTNDbXV0YXRpb24lMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhodG1sJTIyJTIwZGVsYXlfaW5wdXQlM0QlMjJmYWxzZSUyMiUzRSUzQyUyRm11dGF0aW9uJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyT0lEJTIyJTNFMF91c2VyZGF0YS4wLkxXWi5QUk9HTk9TRV9EQVVFUl9XQVJNV0FTU0VSQkVSRUlUVU5HJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJXSVRIX0RFTEFZJTIyJTNFRkFMU0UlM0MlMkZmaWVsZCUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMlZBTFVFJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMiFkRFJmWS1lMiUyNCFLJTdDeiU1QipTJTQwTXolMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJOVU0lMjIlM0UwJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDbmV4dCUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnZhcmlhYmxlc19zZXQlMjIlMjBpZCUzRCUyMkEhdCU1QnVsaHQ3RyUzQm9hJTI0JTNCViUyNE8uNyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMlZBUiUyMiUyMGlkJTNEJTIya3hHQmNUdXY2ISU0ME8lM0ZZYTElN0MlMkNGfiUyMiUzRVNFS1VOREVOX0FCX1NUQVJUJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJWQUxVRSUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfbnVtYmVyJTIyJTIwaWQlM0QlMjIocSlzRDQlN0NnTUFINWhiRSU3RCUyQlZsJTNGJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGbmV4dCUzRSUzQyUyRmJsb2NrJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyb25fZXh0JTIyJTIwaWQlM0QlMjIqbiU3RHhvbFglNUVIJTVEUCU0MFQ3ZllsKVMyJTIyJTIweCUzRCUyMjg3JTIyJTIweSUzRCUyMi0yODglMjIlM0UlM0NtdXRhdGlvbiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGh0bWwlMjIlMjBpdGVtcyUzRCUyMjElMjIlM0UlM0MlMkZtdXRhdGlvbiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkNPTkRJVElPTiUyMiUzRW5lJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBQ0tfQ09ORElUSU9OJTIyJTNFJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJPSUQwJTIyJTNFJTNDc2hhZG93JTIwdHlwZSUzRCUyMmZpZWxkX29pZCUyMiUyMGlkJTNEJTIyJTVES0MuNWo1ekNHIXlzJTdDJTdDQyUyNE5qbyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMm9pZCUyMiUzRTBfdXNlcmRhdGEuMC5MV1ouVEVTVF9CT09MJTNDJTJGZmllbGQlM0UlM0MlMkZzaGFkb3clM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJTVEFURU1FTlQlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJjb250cm9sc19pZiUyMiUyMGlkJTNEJTIySXBjeCU1QmRzWSU3Q2l2dmVwJTNEN00lNUUzRCUyMiUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMklGMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2Jvb2xlYW4lMjIlMjBpZCUzRCUyMnZmWi54aDFGR18yUSlfdCU0MHglN0M0QSUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMkJPT0wlMjIlM0VUUlVFJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMkRPMCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMnRpbWVvdXRzX3NldGludGVydmFsJTIyJTIwaWQlM0QlMjIpY0dNJTNGSlglNUJXJTdDJTdETDQlNUJrcSklM0ZRLiUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk5BTUUlMjIlM0VJbnRlcnZhbGwlM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMklOVEVSVkFMJTIyJTNFMSUzQyUyRmZpZWxkJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVU5JVCUyMiUzRXNlYyUzQyUyRmZpZWxkJTNFJTNDc3RhdGVtZW50JTIwbmFtZSUzRCUyMlNUQVRFTUVOVCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmNvbnRyb2xzX3doaWxlVW50aWwlMjIlMjBpZCUzRCUyMkZ1KkRYbG44JTI0R3olNDB1dGYuaW9DSyUyMiUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMk1PREUlMjIlM0VVTlRJTCUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyQk9PTCUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMmxvZ2ljX2NvbXBhcmUlMjIlMjBpZCUzRCUyMmFYQyU3Q3ZpZV9oIWdvbzgzR044dTElMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPUCUyMiUzRUdUJTNDJTJGZmllbGQlM0UlM0N2YWx1ZSUyMG5hbWUlM0QlMjJBJTIyJTNFJTNDYmxvY2slMjB0eXBlJTNEJTIyZ2V0X3ZhbHVlJTIyJTIwaWQlM0QlMjJMJTJGd3liOG4lM0RUM3kqa1RCNzBCZVMlMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0UwX3VzZXJkYXRhLjAuTFdaLlRFU1RfV0VSVCUzQyUyRmZpZWxkJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3ZhbHVlJTIwbmFtZSUzRCUyMkIlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJnZXRfdmFsdWUlMjIlMjBpZCUzRCUyMiU2MCU3RF9qIS12WC4ybGpUdyU3Q0pXQiUyM2clMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJBVFRSJTIyJTNFdmFsJTNDJTJGZmllbGQlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0UwX3VzZXJkYXRhLjAuTFdaLldXX1NPTExfTUFYJTNDJTJGZmllbGQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnZhbHVlJTNFJTNDJTJGYmxvY2slM0UlM0MlMkZ2YWx1ZSUzRSUzQ3N0YXRlbWVudCUyMG5hbWUlM0QlMjJETyUyMiUzRSUzQ2Jsb2NrJTIwdHlwZSUzRCUyMm1hdGhfY2hhbmdlJTIyJTIwaWQlM0QlMjIlNDAuWnQlMjMlNUQublp6JTVFUUlFJTdEZ21qelklMjIlM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJWQVIlMjIlMjBpZCUzRCUyMmt4R0JjVHV2NiElNDBPJTNGWWExJTdDJTJDRn4lMjIlM0VTRUtVTkRFTl9BQl9TVEFSVCUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyREVMVEElMjIlM0UlM0NzaGFkb3clMjB0eXBlJTNEJTIybWF0aF9udW1iZXIlMjIlMjBpZCUzRCUyMldYWHp6eWdJamlMUXAlNURXbCUyM1NyJTQwJTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyTlVNJTIyJTNFMSUzQyUyRmZpZWxkJTNFJTNDJTJGc2hhZG93JTNFJTNDJTJGdmFsdWUlM0UlM0NuZXh0JTNFJTNDYmxvY2slMjB0eXBlJTNEJTIydXBkYXRlJTIyJTIwaWQlM0QlMjI0aCU3RFhuKXU0VERULVUlM0ElM0QlM0JGJTdDWiolMjIlM0UlM0NtdXRhdGlvbiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGh0bWwlMjIlMjBkZWxheV9pbnB1dCUzRCUyMmZhbHNlJTIyJTNFJTNDJTJGbXV0YXRpb24lM0UlM0NmaWVsZCUyMG5hbWUlM0QlMjJPSUQlMjIlM0UwX3VzZXJkYXRhLjAuTFdaLlBST0dOT1NFX0RBVUVSX1dBUk1XQVNTRVJCRVJFSVRVTkclM0MlMkZmaWVsZCUzRSUzQ2ZpZWxkJTIwbmFtZSUzRCUyMldJVEhfREVMQVklMjIlM0VGQUxTRSUzQyUyRmZpZWxkJTNFJTNDdmFsdWUlMjBuYW1lJTNEJTIyVkFMVUUlMjIlM0UlM0NibG9jayUyMHR5cGUlM0QlMjJ2YXJpYWJsZXNfZ2V0JTIyJTIwaWQlM0QlMjIxS1dHJTdDMEUlMjMlN0JCJTVEJTdDNU5DJTI1JTNCQU53JTIyJTNFJTNDZmllbGQlMjBuYW1lJTNEJTIyVkFSJTIyJTIwaWQlM0QlMjJreEdCY1R1djYhJTQwTyUzRllhMSU3QyUyQ0Z+JTIyJTNFU0VLVU5ERU5fQUJfU1RBUlQlM0MlMkZmaWVsZCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGdmFsdWUlM0UlM0MlMkZibG9jayUzRSUzQyUyRm5leHQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGc3RhdGVtZW50JTNFJTNDJTJGYmxvY2slM0UlM0MlMkZzdGF0ZW1lbnQlM0UlM0MlMkZibG9jayUzRSUzQyUyRnN0YXRlbWVudCUzRSUzQyUyRmJsb2NrJTNFJTNDJTJGeG1sJTNF
      
      

      Ich würde mich sehr freuen, wenn mir jemand einen Tipp geben könnte ...

      Vielen Dank 🙂

      Asgothian paul53 3 Replies Last reply Reply Quote 0
      • Asgothian
        Asgothian Developer @nureinbenutzer last edited by

        @nureinbenutzer

        Ich denke die Logik ist insgesamt unsauber.

        Ich würde wie Folgt vorgehen:

        • im Trigger TEST_BOOL:
          -- Variable "startZeitpunkt" auf "sekunden seit Tagesanfang" setzen

        • neuen Trigger auf "TEST_WERT", ist grösser als vorher:
          -- vergleich: Test_Wert > WW_SOLL_MAX und test_bool = wahr, dann aus aktuellem sekunden seit Tagesanfang und startZeitpunkt die vergangene Zeit bestimmen, TEST_BOOL auf falsch setzen

        A.

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

          @nureinbenutzer sagte: jemand einen Tipp geben könnte ...

          • "wiederhole bis" erzeugt eine Endlosschleife
          • "falls wahr" führt immer den mache-Zweig aus, da wahr eine Konstante ist
          • Sekunden-Intervalle sind für thermische Prozesse "Overkill"
          1 Reply Last reply Reply Quote 1
          • paul53
            paul53 @nureinbenutzer last edited by paul53

            @nureinbenutzer sagte: Ziel ist, dass ich aus einem zu ermittelnden Temperaturhub pro Zeiteinheit dann ermitteln kann per Dreisatz, wie viele Sekunden es dauern wird, bis WW_SOLL_MAX erreicht werden (das lässt sich quasi nur dynamisch "schätzen").

            Vorschlag für eine "Schätzung" in Minuten (nicht getestet):

            Bild_2021-02-02_133317.png

            <xml xmlns="https://developers.google.com/blockly/xml">
             <variables>
               <variable type="timeout" id="timeout">timeout</variable>
               <variable id="5fs8cC0rgvo}RnPh1:Zz">freigabe_restzeit</variable>
               <variable id="k/e8u)/|8ZJtwTNlmyHg">gradient</variable>
               <variable id="F;pi=YCjAt(J2F(ruz6o">restzeit</variable>
             </variables>
             <block type="on_ext" id=";em9_OJ?oq,2wXKXG]F/" x="88" y="87">
               <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
               <field name="CONDITION">ne</field>
               <field name="ACK_CONDITION"></field>
               <value name="OID0">
                 <shadow type="field_oid" id="AI3RBHW.}jcRT@UBiDF2">
                   <field name="oid">default</field>
                 </shadow>
               </value>
               <statement name="STATEMENT">
                 <block type="controls_if" id=":scJqnklkc!RCoazwTY,">
                   <mutation else="1"></mutation>
                   <value name="IF0">
                     <block type="on_source" id="binMon22@$^prN/sONgT">
                       <field name="ATTR">state.val</field>
                     </block>
                   </value>
                   <statement name="DO0">
                     <block type="timeouts_settimeout" id="5b:2vJL%N?5L3z5f*a6K">
                       <field name="NAME">timeout</field>
                       <field name="DELAY">10</field>
                       <field name="UNIT">min</field>
                       <statement name="STATEMENT">
                         <block type="variables_set" id="j53pgOEF52MKX9dSPoX`">
                           <field name="VAR" id="5fs8cC0rgvo}RnPh1:Zz">freigabe_restzeit</field>
                           <value name="VALUE">
                             <block type="logic_boolean" id="(vnrnaj/zQ-EYZ=4JH?1">
                               <field name="BOOL">TRUE</field>
                             </block>
                           </value>
                         </block>
                       </statement>
                     </block>
                   </statement>
                   <statement name="ELSE">
                     <block type="timeouts_cleartimeout" id="}iYe]E$I^sDxE+E2f0Yg">
                       <field name="NAME">timeout</field>
                       <next>
                         <block type="variables_set" id="0ql};U!~S4V6g0l9yYeg">
                           <field name="VAR" id="5fs8cC0rgvo}RnPh1:Zz">freigabe_restzeit</field>
                           <value name="VALUE">
                             <block type="logic_boolean" id="MVUqbz?/bW2!fT9)$RGU">
                               <field name="BOOL">FALSE</field>
                             </block>
                           </value>
                           <next>
                             <block type="update" id="?pR/-^eST}/s#z?0g*39">
                               <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                               <field name="OID">Object ID</field>
                               <field name="WITH_DELAY">FALSE</field>
                               <value name="VALUE">
                                 <block type="math_number" id="u]D[|peunM}+aj[?5el6">
                                   <field name="NUM">0</field>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </statement>
                 </block>
               </statement>
               <next>
                 <block type="on_ext" id="yPTd3Fm-[NbVt{oiw+F3">
                   <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
                   <field name="CONDITION">ne</field>
                   <field name="ACK_CONDITION"></field>
                   <value name="OID0">
                     <shadow type="field_oid" id="?}1IXJhxKg(qQO4)%iI]">
                       <field name="oid">default</field>
                     </shadow>
                   </value>
                   <statement name="STATEMENT">
                     <block type="controls_if" id="RL@aM.#2?a_@g_1{PwS:">
                       <value name="IF0">
                         <block type="variables_get" id="_wW/joY3I,TOx5!x$+-#">
                           <field name="VAR" id="5fs8cC0rgvo}RnPh1:Zz">freigabe_restzeit</field>
                         </block>
                       </value>
                       <statement name="DO0">
                         <block type="comment" id="KhB8:I0E5+wJ$W0iD9XL">
                           <field name="COMMENT">K / min</field>
                           <next>
                             <block type="variables_set" id=":Xbl`,?18VSD;`tRG[-:">
                               <field name="VAR" id="k/e8u)/|8ZJtwTNlmyHg">gradient</field>
                               <value name="VALUE">
                                 <block type="math_arithmetic" id="9{C2DihT:4@/*dCil9P`">
                                   <field name="OP">MULTIPLY</field>
                                   <value name="A">
                                     <shadow type="math_number" id="xb!9E^Sx2}pSL`18j5C8">
                                       <field name="NUM">60000</field>
                                     </shadow>
                                   </value>
                                   <value name="B">
                                     <shadow type="math_number" id="Cg[-*;}u3,d{Ab%ni(l|">
                                       <field name="NUM">1</field>
                                     </shadow>
                                     <block type="math_arithmetic" id="tj*:;M;O,a/[#Dio5:h}">
                                       <field name="OP">DIVIDE</field>
                                       <value name="A">
                                         <shadow type="math_number" id="k18i=gsIw3cm$py}eQRx">
                                           <field name="NUM">1</field>
                                         </shadow>
                                         <block type="math_arithmetic" id="Hp?rzgdGcVsfwoqn=@A1">
                                           <field name="OP">MINUS</field>
                                           <value name="A">
                                             <shadow type="math_number" id=".cS^%mVTvZJzWQc94Ao/">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="on_source" id="l`-0%Y2TC{TYX+=*EHw}">
                                               <field name="ATTR">state.val</field>
                                             </block>
                                           </value>
                                           <value name="B">
                                             <shadow type="math_number" id=")}4H_y88c[RfPP$%rYrc">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="on_source" id="EX1uSRt(:%*DBa~-`v%g">
                                               <field name="ATTR">oldState.val</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <shadow type="math_number" id="WcOrdE@6y^w11`?1sujv">
                                           <field name="NUM">1</field>
                                         </shadow>
                                         <block type="math_arithmetic" id=":~@)R`mI74As[F)+|N51">
                                           <field name="OP">MINUS</field>
                                           <value name="A">
                                             <shadow type="math_number">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="on_source" id="DAtOdQ?GQ^D#_`BfS~jH">
                                               <field name="ATTR">state.lc</field>
                                             </block>
                                           </value>
                                           <value name="B">
                                             <shadow type="math_number">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="on_source" id="v,u0~*oypF2kw3Kx~Yqw">
                                               <field name="ATTR">oldState.lc</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                               <next>
                                 <block type="variables_set" id="PRnW6A`s0FjK**./BQ,z">
                                   <field name="VAR" id="F;pi=YCjAt(J2F(ruz6o">restzeit</field>
                                   <value name="VALUE">
                                     <block type="math_arithmetic" id="W*bK$`Cf{?GwJPgp:Sf2">
                                       <field name="OP">DIVIDE</field>
                                       <value name="A">
                                         <shadow type="math_number" id="Xt@s=@e2TJIO7~*fj~K~">
                                           <field name="NUM">1</field>
                                         </shadow>
                                         <block type="math_arithmetic" id="}2USQ1b-2]}U;o;viTry">
                                           <field name="OP">MINUS</field>
                                           <value name="A">
                                             <shadow type="math_number" id="BoQ_s8,O9[e.TN34@as,">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="get_value" id="U[bhZd)x5/-@Sb4Z_nE9">
                                               <field name="ATTR">val</field>
                                               <field name="OID">ID auswählen</field>
                                             </block>
                                           </value>
                                           <value name="B">
                                             <shadow type="math_number" id="`H3;co*,sK/4!u;MW(M~">
                                               <field name="NUM">1</field>
                                             </shadow>
                                             <block type="on_source" id="5^*W@$Z}2cir]Cw|_V$F">
                                               <field name="ATTR">state.val</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                       <value name="B">
                                         <shadow type="math_number" id="`v{j3ByMpEg.%}(S=?K5">
                                           <field name="NUM">1</field>
                                         </shadow>
                                         <block type="variables_get" id="h#DAMp0-r)-*(]$*4zDc">
                                           <field name="VAR" id="k/e8u)/|8ZJtwTNlmyHg">gradient</field>
                                         </block>
                                       </value>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="update" id="M$}:nhp,zk*UW^4ymv=#">
                                       <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                                       <field name="OID">Object ID</field>
                                       <field name="WITH_DELAY">FALSE</field>
                                       <value name="VALUE">
                                         <block type="math_round" id="o9;R?/w7[]#EinKF}2]b">
                                           <field name="OP">ROUND</field>
                                           <value name="NUM">
                                             <shadow type="math_number" id="yoq3?}`7)EWO[t@Jx0g~">
                                               <field name="NUM">3.1</field>
                                             </shadow>
                                             <block type="variables_get" id="79:}h1nd$Z-f%7}.?6wX">
                                               <field name="VAR" id="F;pi=YCjAt(J2F(ruz6o">restzeit</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                     </block>
                                   </next>
                                 </block>
                               </next>
                             </block>
                           </next>
                         </block>
                       </statement>
                     </block>
                   </statement>
                 </block>
               </next>
             </block>
             <block type="comment" id=".!VeuCn/7]}iTkw#wC2|" x="337" y="87">
               <field name="COMMENT">WW-Bereitung</field>
             </block>
             <block type="comment" id="qO0.U#^WIO`BzpX0@,Kj" x="337" y="412">
               <field name="COMMENT">WW Temperatur</field>
             </block>
             <block type="comment" id=";)oE:{7P0(v`WleD6]K5" x="513" y="613">
               <field name="COMMENT">WW_SOLL_MAX</field>
             </block>
            </xml>
            

            1 Reply Last reply Reply Quote 2
            • N
              nureinbenutzer last edited by

              Danke Euch beiden für die wertvollen Tipps und die Lösungsvorschläge 🙂

              Man lernt nie aus und ich gerade viel dazu.

              Ich werde mal versuchen, das Ganze zu adaptieren bzw. dann in mein (komplett) fertiges Script zu übernehmen.

              Dazu gibt es dann natürlich ein Feedback 🙂

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

              Support us

              ioBroker
              Community Adapters
              Donate

              922
              Online

              31.6k
              Users

              79.5k
              Topics

              1.3m
              Posts

              3
              5
              268
              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