Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Skript via Button starten (Cocktailautomat)

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    582

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    625

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Skript via Button starten (Cocktailautomat)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
15 Beiträge 4 Kommentatoren 1.0k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B BamBam89

    Hallo zusammen,

    wie der Titel es schon schreibt, möchte ich mich gerne mit einem Cocktailautomaten beschäftigen.
    Ich habe bereits viele Dinge mit IO-Broker umgesetzt allerdings habe ich mich bis dato noch nicht an JS oder Blockly heran gewagt.

    Das soll jetzt mit diesem Projekt passieren. Die eigentliche Frage ist erstmal, wie bekomme ich einen Button in VIS abgefragt das dieser State dann mein Skript starten. Ich hab schon so einiges gelesen, aber so richtig schlau bin ich daraus nicht geworden.

    Vielleicht nochmal zur Erklärung. Ich werde gelinde gesagt viele Button in VIS haben. Jeder dieser Button soll dann ein eigenes Skript starten welches die einzelnen Pumpenlaufzeiten steuert. (Das bekomme ich mit Blockly auch hin. Habe da schon ein wenig rum probiert :-) )
    Natürlich soll nach Betätigung eines Buttons das Triggern des selben oder eines anderen Buttons nicht möglich sein, bis das letzte Skript durchgelaufen ist.

    Vielleicht ist dieses Vorgehen etwas hemdsärmelig, aber das ist für mich das einfachste vorgehen.

    Ich hoffe Ihr könnt mir ein wenig beiseite stehen.

    Vielen Dank und euch ein schönes Wochenende
    Gruß Christian

    GarganoG Offline
    GarganoG Offline
    Gargano
    schrieb am zuletzt editiert von Gargano
    #2

    @bambam89 Das Ganze geht über Triggern von Datenpunkten. Mit einem Button in Vis setzt Du einen Datenpunkt (z.b. 'MeinDP') auf true.

    Im Script sieht das dann so aus

    const idAction = 'MeinDP';
    
    on({id: idAction , val: true}, function (obj) {
      // hier die Funktion rein
    });
    
    B 1 Antwort Letzte Antwort
    0
    • GarganoG Gargano

      @bambam89 Das Ganze geht über Triggern von Datenpunkten. Mit einem Button in Vis setzt Du einen Datenpunkt (z.b. 'MeinDP') auf true.

      Im Script sieht das dann so aus

      const idAction = 'MeinDP';
      
      on({id: idAction , val: true}, function (obj) {
        // hier die Funktion rein
      });
      
      B Offline
      B Offline
      BamBam89
      schrieb am zuletzt editiert von BamBam89
      #3

      @gargano

      Ok verstanden und wie folgt umgesetzt:

      Unbenannt.PNG ```

      Das heißt mit Änderung des Datenpunktes Sex on the Beach auf true wird Pumpe 1 und 2 gestartet, wobei Pumpe 2 nach 5 und Pumpe 1 nach 10 Sekunden gestoppt wird.

      Jetzt müsste man natürlich noch den Datenpunkt Sex on the Beach auf false nach durchlauf dieses Skriptes setzten das kein Neustart während des Durchlaufs möglich ist und auch keine anderes Skript gestartet werden kann und da stoße ich auf meine Probleme.

      Den Datenpunkt bekomme ich über die Zeit dann auf false zurück gesetzt, aber das geht doch bestimmt schöner...

      27eee41b-7ed4-4c5d-ae82-c5b890955485-image.png

      Hättet ihr eine Idee?

      Gruß Christian

      htreckslerH Z 2 Antworten Letzte Antwort
      0
      • B BamBam89

        @gargano

        Ok verstanden und wie folgt umgesetzt:

        Unbenannt.PNG ```

        Das heißt mit Änderung des Datenpunktes Sex on the Beach auf true wird Pumpe 1 und 2 gestartet, wobei Pumpe 2 nach 5 und Pumpe 1 nach 10 Sekunden gestoppt wird.

        Jetzt müsste man natürlich noch den Datenpunkt Sex on the Beach auf false nach durchlauf dieses Skriptes setzten das kein Neustart während des Durchlaufs möglich ist und auch keine anderes Skript gestartet werden kann und da stoße ich auf meine Probleme.

        Den Datenpunkt bekomme ich über die Zeit dann auf false zurück gesetzt, aber das geht doch bestimmt schöner...

        27eee41b-7ed4-4c5d-ae82-c5b890955485-image.png

        Hättet ihr eine Idee?

        Gruß Christian

        htreckslerH Offline
        htreckslerH Offline
        htrecksler
        Forum Testing
        schrieb am zuletzt editiert von
        #4

        @bambam89 wenn dir der Zustand (True oder False) vom Auslöser egal ist, du ihn also anderweitig nicht brauchst, dann frag doch einfach die Änderung ab. Egal ob true oder False. Dann musst du nicht wieder auf False zurücksetzen.

        Gruss Hermann

        ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

        1 Antwort Letzte Antwort
        0
        • B BamBam89

          @gargano

          Ok verstanden und wie folgt umgesetzt:

          Unbenannt.PNG ```

          Das heißt mit Änderung des Datenpunktes Sex on the Beach auf true wird Pumpe 1 und 2 gestartet, wobei Pumpe 2 nach 5 und Pumpe 1 nach 10 Sekunden gestoppt wird.

          Jetzt müsste man natürlich noch den Datenpunkt Sex on the Beach auf false nach durchlauf dieses Skriptes setzten das kein Neustart während des Durchlaufs möglich ist und auch keine anderes Skript gestartet werden kann und da stoße ich auf meine Probleme.

          Den Datenpunkt bekomme ich über die Zeit dann auf false zurück gesetzt, aber das geht doch bestimmt schöner...

          27eee41b-7ed4-4c5d-ae82-c5b890955485-image.png

          Hättet ihr eine Idee?

          Gruß Christian

          Z Abwesend
          Z Abwesend
          zahnheinrich
          schrieb am zuletzt editiert von zahnheinrich
          #5

          @bambam89
          Definiere deinen DP als Taster (Button) (-> role : button).
          In deinem blockly triggerst du dann nicht auf ...wurde geändert... sondern auf ...wurde aktualisiert...

          MfG Ulrich

          1 Antwort Letzte Antwort
          0
          • B Offline
            B Offline
            BamBam89
            schrieb am zuletzt editiert von BamBam89
            #6

            @zahnheinrich @htrecksler

            Aber stellen mich diese Lösungen dann nicht vor das selbe Problem?

            Ich könnte jederzeit den imaginären Taster drücken und es würde immer wieder das Skript starten, auch wenn diesen derzeit mitten drin ist.

            Es soll quasi eine digitale Cocktailkarte geben. Dort sind dann 20 + x Cocktails hinterlegt. Nach start eines Cocktails soll natürlich nicht irgend jemand dann einen anderen oder den selben Cocktail nochmal auswählen können bis die Zubereitung abgeschlossen ist.

            htreckslerH 1 Antwort Letzte Antwort
            0
            • B BamBam89

              @zahnheinrich @htrecksler

              Aber stellen mich diese Lösungen dann nicht vor das selbe Problem?

              Ich könnte jederzeit den imaginären Taster drücken und es würde immer wieder das Skript starten, auch wenn diesen derzeit mitten drin ist.

              Es soll quasi eine digitale Cocktailkarte geben. Dort sind dann 20 + x Cocktails hinterlegt. Nach start eines Cocktails soll natürlich nicht irgend jemand dann einen anderen oder den selben Cocktail nochmal auswählen können bis die Zubereitung abgeschlossen ist.

              htreckslerH Offline
              htreckslerH Offline
              htrecksler
              Forum Testing
              schrieb am zuletzt editiert von
              #7

              @bambam89 Und wann ist der Cocktail fertig? Nach 11 Sek doch auch nicht oder? Ab wann darf denn wieder gedrückt werden? Oder anders...wer entscheidet wann wieder gedrückt werden darf.

              Gruss Hermann

              ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

              B 1 Antwort Letzte Antwort
              0
              • htreckslerH htrecksler

                @bambam89 Und wann ist der Cocktail fertig? Nach 11 Sek doch auch nicht oder? Ab wann darf denn wieder gedrückt werden? Oder anders...wer entscheidet wann wieder gedrückt werden darf.

                B Offline
                B Offline
                BamBam89
                schrieb am zuletzt editiert von
                #8

                @htrecksler said in Skript via Button starten (Cocktailautomat):

                @bambam89 Und wann ist der Cocktail fertig? Nach 11 Sek doch auch nicht oder? Ab wann darf denn wieder gedrückt werden? Oder anders...wer entscheidet wann wieder gedrückt werden darf.

                Die 11 Sekunden sind natürlich nur derzeit angenommen. Das wird ja dann je nach Durchflussleistung der Pumpe berechnet
                Also 2cl = 3 Sekunden 4cl = 6 Sekunden und so weiter.

                Es sollen also mit klick auf Sex on the Beach 5 Pumpen anlaufen. 4 Stück die dann (angenommen) 5 Sekunden laufen um die jeweils 4cl zu fördern und 1 die (angenommen) 10 Sekunden läuft um die 8 cl zu fördern.

                4 cl Aprikosenlikör
                4 cl Wodka
                8 cl Ananassaft
                4 cl Cranberrysirup
                4 cl Orangensaft

                Nun muss das eben von der Steuerung so sein, das bei nochmaligem "Taster"-Druck oder Statusänderung das Skript NICHT von vorne beginnt sondern erst dann wenn der letzte Cocktail abgeschlossen ist.

                Wobei mir gerade einfällt, könnte man nicht einen weiteren Datenpunkt setzten lassen, der bei Tastendruck = true wird und mit als UND Eingangsverknüpfung in jeden Cocktail kommt und auch beim Ende jeden Cocktails wieder auf false gesetzt wird!?

                Angenommen es gibt eine Datenpunkt, nennen wir Ihn Verriegelung.
                Jemand drückt auf Sex on the Beach und es hat keiner vorher irgendetwas gedrückt. Sprich DP Verriegelung = false.

                Bei dem Block "falls; mache, würde ich nun bei falls den Datenpunkt aus VIS (Sex on the Beach) = true UND den Datenpunkt Verriegelung = false miteinander verknüpfen. Treffen beide Bedingungen zu würde als erstes der Datenpunkt Verriegelung auf = true gesetzt und dann der Cocktail ausgegeben werden. Ein Neustarten des Skriptes während der Ausgabe wäre dann ausgeschlossen, da die Bedingung DP Verriegelung = false nicht zutrifft.
                Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                Somit sollte doch sichergestellt sein, das wenn ich bei jedem Cocktail diese Bedingung Veriegelung = false mit in die falls Abfrage bringe, das kein anderer Cockteil angewählt werden kann....

                Ich hoffe das ist einigermaßen verständlich wo ich hin möchte... :-)

                htreckslerH 1 Antwort Letzte Antwort
                0
                • B BamBam89

                  @htrecksler said in Skript via Button starten (Cocktailautomat):

                  @bambam89 Und wann ist der Cocktail fertig? Nach 11 Sek doch auch nicht oder? Ab wann darf denn wieder gedrückt werden? Oder anders...wer entscheidet wann wieder gedrückt werden darf.

                  Die 11 Sekunden sind natürlich nur derzeit angenommen. Das wird ja dann je nach Durchflussleistung der Pumpe berechnet
                  Also 2cl = 3 Sekunden 4cl = 6 Sekunden und so weiter.

                  Es sollen also mit klick auf Sex on the Beach 5 Pumpen anlaufen. 4 Stück die dann (angenommen) 5 Sekunden laufen um die jeweils 4cl zu fördern und 1 die (angenommen) 10 Sekunden läuft um die 8 cl zu fördern.

                  4 cl Aprikosenlikör
                  4 cl Wodka
                  8 cl Ananassaft
                  4 cl Cranberrysirup
                  4 cl Orangensaft

                  Nun muss das eben von der Steuerung so sein, das bei nochmaligem "Taster"-Druck oder Statusänderung das Skript NICHT von vorne beginnt sondern erst dann wenn der letzte Cocktail abgeschlossen ist.

                  Wobei mir gerade einfällt, könnte man nicht einen weiteren Datenpunkt setzten lassen, der bei Tastendruck = true wird und mit als UND Eingangsverknüpfung in jeden Cocktail kommt und auch beim Ende jeden Cocktails wieder auf false gesetzt wird!?

                  Angenommen es gibt eine Datenpunkt, nennen wir Ihn Verriegelung.
                  Jemand drückt auf Sex on the Beach und es hat keiner vorher irgendetwas gedrückt. Sprich DP Verriegelung = false.

                  Bei dem Block "falls; mache, würde ich nun bei falls den Datenpunkt aus VIS (Sex on the Beach) = true UND den Datenpunkt Verriegelung = false miteinander verknüpfen. Treffen beide Bedingungen zu würde als erstes der Datenpunkt Verriegelung auf = true gesetzt und dann der Cocktail ausgegeben werden. Ein Neustarten des Skriptes während der Ausgabe wäre dann ausgeschlossen, da die Bedingung DP Verriegelung = false nicht zutrifft.
                  Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                  Somit sollte doch sichergestellt sein, das wenn ich bei jedem Cocktail diese Bedingung Veriegelung = false mit in die falls Abfrage bringe, das kein anderer Cockteil angewählt werden kann....

                  Ich hoffe das ist einigermaßen verständlich wo ich hin möchte... :-)

                  htreckslerH Offline
                  htreckslerH Offline
                  htrecksler
                  Forum Testing
                  schrieb am zuletzt editiert von
                  #9

                  @bambam89 sagte in Skript via Button starten (Cocktailautomat):

                  Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                  So ähnlich wäre jetzt auch mein Vorschlag gewesen.

                  Gruss Hermann

                  ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

                  B 1 Antwort Letzte Antwort
                  0
                  • htreckslerH htrecksler

                    @bambam89 sagte in Skript via Button starten (Cocktailautomat):

                    Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                    So ähnlich wäre jetzt auch mein Vorschlag gewesen.

                    B Offline
                    B Offline
                    BamBam89
                    schrieb am zuletzt editiert von
                    #10

                    @htrecksler said in Skript via Button starten (Cocktailautomat):

                    @bambam89 sagte in Skript via Button starten (Cocktailautomat):

                    Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                    So ähnlich wäre jetzt auch mein Vorschlag gewesen.

                    Ok das klingt ja schonmal gut :-)
                    Aber es stellt sich mir dann die Frage, kann man den DP Verriegelung am Ende irgend einer Schleife automatisch auf false setzen lassen oder muss ich das wirklich Zeitengesteuert machen?
                    Das geht doch mit Sicherheit anders....

                    htreckslerH 1 Antwort Letzte Antwort
                    0
                    • B BamBam89

                      @htrecksler said in Skript via Button starten (Cocktailautomat):

                      @bambam89 sagte in Skript via Button starten (Cocktailautomat):

                      Sobald der Cocktail ausgegeben ist, wird der DP Verriegelung wieder auf false gesetzt.

                      So ähnlich wäre jetzt auch mein Vorschlag gewesen.

                      Ok das klingt ja schonmal gut :-)
                      Aber es stellt sich mir dann die Frage, kann man den DP Verriegelung am Ende irgend einer Schleife automatisch auf false setzen lassen oder muss ich das wirklich Zeitengesteuert machen?
                      Das geht doch mit Sicherheit anders....

                      htreckslerH Offline
                      htreckslerH Offline
                      htrecksler
                      Forum Testing
                      schrieb am zuletzt editiert von
                      #11

                      @bambam89 mir ist noch nicht ganz klar inwiefern die Arbeitsschritte in ioBroker bekannt bzw. durch iobroker gesteuert sind. Solange das alles an iob vorbei passiert hast du kaum eine chance. Wenn die Pumpen ihren status aber über iob bekannt machen würde es sicher eine Möglichkeit geben.

                      Gruss Hermann

                      ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

                      B 1 Antwort Letzte Antwort
                      0
                      • htreckslerH htrecksler

                        @bambam89 mir ist noch nicht ganz klar inwiefern die Arbeitsschritte in ioBroker bekannt bzw. durch iobroker gesteuert sind. Solange das alles an iob vorbei passiert hast du kaum eine chance. Wenn die Pumpen ihren status aber über iob bekannt machen würde es sicher eine Möglichkeit geben.

                        B Offline
                        B Offline
                        BamBam89
                        schrieb am zuletzt editiert von
                        #12

                        Vielleicht drücke ich mich falsch aus, oder vielleicht verstehe ich dich auch falsch.
                        Wenn ich diesen Ablauf nehme.

                        16df7ccb-5201-456d-87e8-3472396c5754-image.png

                        Dann wird hier der DP Verriegelung (ganz unten) nach 11 Sekunden wieder auf false gestellt und ein neuer Cocktail könnte gestartet werden.
                        Die Frage ist eben, muss ich bei jedem Cocktail Script dieses Datenpunkt zeitlich, sprich z.B. 1 Sekunde nach der längsten Laufzeit einer Pumpe setzten oder ist das irgend wie anders realisierbar?

                        Schonmal besten Dank für deine Unterstützung

                        htreckslerH 1 Antwort Letzte Antwort
                        0
                        • B BamBam89

                          Vielleicht drücke ich mich falsch aus, oder vielleicht verstehe ich dich auch falsch.
                          Wenn ich diesen Ablauf nehme.

                          16df7ccb-5201-456d-87e8-3472396c5754-image.png

                          Dann wird hier der DP Verriegelung (ganz unten) nach 11 Sekunden wieder auf false gestellt und ein neuer Cocktail könnte gestartet werden.
                          Die Frage ist eben, muss ich bei jedem Cocktail Script dieses Datenpunkt zeitlich, sprich z.B. 1 Sekunde nach der längsten Laufzeit einer Pumpe setzten oder ist das irgend wie anders realisierbar?

                          Schonmal besten Dank für deine Unterstützung

                          htreckslerH Offline
                          htreckslerH Offline
                          htrecksler
                          Forum Testing
                          schrieb am zuletzt editiert von
                          #13

                          @bambam89 du könntest nach der Abschaltung der letzten Pumpe (Steuerung auf FALSE) einen weiteren DP "CocktailFertig" auf True setzen und mit einer weiteren Subscription darauf reagieren und die Sperre zurücknehmen und CocktailFertig auf False setzen.

                          Gruss Hermann

                          ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

                          B 1 Antwort Letzte Antwort
                          0
                          • htreckslerH htrecksler

                            @bambam89 du könntest nach der Abschaltung der letzten Pumpe (Steuerung auf FALSE) einen weiteren DP "CocktailFertig" auf True setzen und mit einer weiteren Subscription darauf reagieren und die Sperre zurücknehmen und CocktailFertig auf False setzen.

                            B Offline
                            B Offline
                            BamBam89
                            schrieb am zuletzt editiert von
                            #14

                            @htrecksler said in Skript via Button starten (Cocktailautomat):

                            @bambam89 du könntest nach der Abschaltung der letzten Pumpe (Steuerung auf FALSE) einen weiteren DP "CocktailFertig" auf True setzen und mit einer weiteren Subscription darauf reagieren und die Sperre zurücknehmen und CocktailFertig auf False setzen.

                            Kann ich denn nicht dann gleich den DP Verriegelung zurück setzen?
                            Bei einem weiteren DP Cocktail fertig stoße ich doch auf das gleiche Problem. Wann ist denn die letzte Pumpe fertig? Wie kann das abgefragt werden?

                            htreckslerH 1 Antwort Letzte Antwort
                            0
                            • B BamBam89

                              @htrecksler said in Skript via Button starten (Cocktailautomat):

                              @bambam89 du könntest nach der Abschaltung der letzten Pumpe (Steuerung auf FALSE) einen weiteren DP "CocktailFertig" auf True setzen und mit einer weiteren Subscription darauf reagieren und die Sperre zurücknehmen und CocktailFertig auf False setzen.

                              Kann ich denn nicht dann gleich den DP Verriegelung zurück setzen?
                              Bei einem weiteren DP Cocktail fertig stoße ich doch auf das gleiche Problem. Wann ist denn die letzte Pumpe fertig? Wie kann das abgefragt werden?

                              htreckslerH Offline
                              htreckslerH Offline
                              htrecksler
                              Forum Testing
                              schrieb am zuletzt editiert von
                              #15

                              @bambam89 ich befürchte, du wirst anders an die Sache herangehen müssen. Da werden Array's und Timer ins spiel kommen müssen. Aber vor allem brauchst du einen Ablaufplan. Du musst datentechnisch wissen was in welcher Reihenfolge passieren muss.
                              Irgendwie ist es ähnlich wie wir Script für die Bewässerung. Auf da werden Datenpunkte in einer bestimmten Reihenfolge für eine gewisse Zeit auf TRUE gesetzt.

                              Gruss Hermann

                              ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              843

                              Online

                              32.6k

                              Benutzer

                              81.9k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe