Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Blockly und Funktionen

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    12
    1
    124

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.3k

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

Blockly und Funktionen

Scheduled Pinned Locked Moved Skripten / Logik
19 Posts 7 Posters 5.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PlasmachefP Offline
    PlasmachefP Offline
    Plasmachef
    wrote on last edited by
    #1

    Hallo Zusammen,

    folgende Frage:

    Ist es möglich eine Blockly-Funktion, die in Skript A geschrieben wurde, in Skript B zu verwenden?

    Hintergrund:

    Ich habe eine Funktion (mit 3 Variablen) in Blockly geschrieben.

    Diese möchte / muss ich aus div. anderen Skripten aufrufen, damit ich (ist eine Ausgaberoutine für Telegram) diese nicht x-mal in den unterschiedlichsten Skripten einbauen muss.

    Innerhalb desselben Skripts wird mir eine Aufruf angeboten (inkl. Variablen).

    Wenn nicht … welche Alternative habe ich (Datenpunkte anlegen, die Werte reinschreibe und dann Skript aufrufen kenne ich)?

    Danke für die Antworten

    Grüße

    1 Reply Last reply
    0
    • rantanplanR Online
      rantanplanR Online
      rantanplan
      wrote on last edited by
      #2

      @Plasmachef:

      Wenn nicht … welche Alternative habe ich (Datenpunkte anlegen, die Werte reinschreibe und dann Skript aufrufen kenne ich)? `

      Um nicht alles immer wieder neu anzulegen, Baustein mit strg-c kopieren und in anderem Script mit strg+v einfügen.

      Oder komplettes Blockly kopieren und nicht benötigte Bausteine löschen.

      Grüße

      Rantanplan

      CCU3 / MS Server 2019(VM) / Scripten mit Blockly

      1 Reply Last reply
      0
      • PlasmachefP Offline
        PlasmachefP Offline
        Plasmachef
        wrote on last edited by
        #3

        Danke für den Tipp!

        Das kann es aber nicht sein, dass ich eine Funktion (Befehlsabfolge), die ich sicherlich 2-3 Dutzend mal brauche, an jede Stelle reinkopiere.

        … und was ist wenn ich Änderungen vornehmen möchte? Mach ich das dann 2-3 Dutzend mal???

        Da muss es eine besser Lösung geben :-)

        1 Reply Last reply
        0
        • rantanplanR Online
          rantanplanR Online
          rantanplan
          wrote on last edited by
          #4

          @Plasmachef:

          Da muss es eine besser Lösung geben :-) `
          Nö, in Blockly, leider nicht.

          Wird es auch wohl nie geben.

          Grüße

          Rantanplan

          CCU3 / MS Server 2019(VM) / Scripten mit Blockly

          1 Reply Last reply
          0
          • paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by
            #5

            @Plasmachef:

            Das kann es aber nicht sein, dass ich eine Funktion (Befehlsabfolge), die ich sicherlich 2-3 Dutzend mal brauche, an jede Stelle reinkopiere.

            … und was ist wenn ich Änderungen vornehmen möchte? Mach ich das dann 2-3 Dutzend mal???

            Da muss es eine besser Lösung geben `
            Ja, wenn Du schon so professionell rangehst, dann solltest Du in Javascript programmieren. In JS kann man oft verwendete eigene Funktionen innerhalb von Skripten unter der Gruppe "global" erstellen. Diese Funktionen stehen in jedem (nicht globalen) Skript zur Verfügung, da sie dort automatisch reinkopiert werden.

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            1 Reply Last reply
            0
            • rantanplanR Online
              rantanplanR Online
              rantanplan
              wrote on last edited by
              #6

              @paul53:

              Ja, wenn Du schon so professionell rangehst, ….... `
              Danke, das habe ich jetzt auch verstanden :oops: :D

              Grüße

              Rantanplan

              CCU3 / MS Server 2019(VM) / Scripten mit Blockly

              1 Reply Last reply
              0
              • PlasmachefP Offline
                PlasmachefP Offline
                Plasmachef
                wrote on last edited by
                #7

                PERFEKT!!!!

                > In JS kann man oft verwendete eigene Funktionen innerhalb von Skripten unter der Gruppe "global" erstellen. Diese Funktionen stehen in jedem (nicht globalen) Skript zur Verfügung, da sie dort automatisch reinkopiert werden.

                Herzlichen Dank, dass war der Tipp zum Wochenende!

                So gehts :-)

                Danke euch für die Hilfe :-)

                1 Reply Last reply
                0
                • AlCalzoneA Offline
                  AlCalzoneA Offline
                  AlCalzone
                  Developer
                  wrote on last edited by
                  #8

                  @rantanplan:

                  @paul53:

                  Ja, wenn Du schon so professionell rangehst, ….... Danke, das habe ich jetzt auch verstanden :oops: :D
                  Wo er Recht hat ;) :twisted:

                  Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                  A 1 Reply Last reply
                  0
                  • AlCalzoneA AlCalzone

                    @rantanplan:

                    @paul53:

                    Ja, wenn Du schon so professionell rangehst, ….... Danke, das habe ich jetzt auch verstanden :oops: :D
                    Wo er Recht hat ;) :twisted:

                    A Offline
                    A Offline
                    acme2020
                    wrote on last edited by
                    #9

                    Ich habe ein ähnliches Problem. Ich habe mittlerweile eine ganze Reihe smarte Heizungsthermostate, die ich steueree. Natürlich auch abhängig von den dazugehörigen Fenstersensoren. Das läuft alles schon einwandfrei, aber ich würde gerne die Befehle zur Steuerung samt Nachricht zum Messenger Signal in eine separate Funktion auslagern, damit ich das nicht zig-mal in die Scripte kopieren muss. Eine Änderung an der Befehls-/Nachrichtenroutine ist im Moment halt mega aufwändig.

                    Gibt es mittlerweile vielleicht einen Weg, von einem Blockly Script ein anderes aufzurufen oder als Include einzubinden? Ich habe wenig Lust, das ganze in Javascript zu programmieren, weil für den Ablauf ein Blockly Script deutlich übersichtlicher ist. Eventuell wäre natürlich der Aufruf einer Javascript Funktion von einem Blockly Script denkbar, aber das habe ich leider nicht hinbekommen.

                    Für einen Schubser wäre ich sehr dankbar, um alles etwas zu optimieren.

                    --

                    Gruß
                    Uwe.

                    DJMarc75D 1 Reply Last reply
                    0
                    • A acme2020

                      Ich habe ein ähnliches Problem. Ich habe mittlerweile eine ganze Reihe smarte Heizungsthermostate, die ich steueree. Natürlich auch abhängig von den dazugehörigen Fenstersensoren. Das läuft alles schon einwandfrei, aber ich würde gerne die Befehle zur Steuerung samt Nachricht zum Messenger Signal in eine separate Funktion auslagern, damit ich das nicht zig-mal in die Scripte kopieren muss. Eine Änderung an der Befehls-/Nachrichtenroutine ist im Moment halt mega aufwändig.

                      Gibt es mittlerweile vielleicht einen Weg, von einem Blockly Script ein anderes aufzurufen oder als Include einzubinden? Ich habe wenig Lust, das ganze in Javascript zu programmieren, weil für den Ablauf ein Blockly Script deutlich übersichtlicher ist. Eventuell wäre natürlich der Aufruf einer Javascript Funktion von einem Blockly Script denkbar, aber das habe ich leider nicht hinbekommen.

                      Für einen Schubser wäre ich sehr dankbar, um alles etwas zu optimieren.

                      --

                      Gruß
                      Uwe.

                      DJMarc75D Offline
                      DJMarc75D Offline
                      DJMarc75
                      wrote on last edited by
                      #10

                      @acme2020 sagte in Blockly und Funktionen:

                      Ich habe ein ähnliches Problem

                      ein FÜNF jahrealter Beitrag und Du hast ein ähnliches Problem ??

                      Welche Thermostate ?
                      Welche Sensoren ?
                      Signa l?
                      Was hast Du denn genau vor?
                      Was hat Du bisher gemacht ?
                      Schubbs uns mal in die richtige Richtung damit wir helfen können !

                      Lehrling seit 1975 !!!
                      Beitrag geholfen ? dann gerne ein upvote rechts unten im Beitrag klicken ;)
                      https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge

                      A 1 Reply Last reply
                      0
                      • DJMarc75D DJMarc75

                        @acme2020 sagte in Blockly und Funktionen:

                        Ich habe ein ähnliches Problem

                        ein FÜNF jahrealter Beitrag und Du hast ein ähnliches Problem ??

                        Welche Thermostate ?
                        Welche Sensoren ?
                        Signa l?
                        Was hast Du denn genau vor?
                        Was hat Du bisher gemacht ?
                        Schubbs uns mal in die richtige Richtung damit wir helfen können !

                        A Offline
                        A Offline
                        acme2020
                        wrote on last edited by
                        #11

                        @DJMarc75
                        Unitec Thermostate, Aqara Fenstersensoren, Benachrichtigung an Signal (Telegram und WhatsApp sind absolutes No-Go) über CallMeBot API. Das funktioniert auch alles wunderbar, so wie ich mir das vorstelle.

                        6 Uhr z.B. stellt der Thermostat im Wohnzimmer 22 Grad ein und um 22 Uhr auf 18 Grad. Ich habe zur Zeit 6 Thermostate laufen, die ähnlich schalten. Ich möchte gern eine Funktion separat haben, die ich mit Parametern (Temperatur, ZigBee Objekt, Text, usw.) aufrufen kann, damit ich das nicht zig-mal in die Scripte kopieren muss. Die Scripte für jeden Thermostat sind ja fast gleich, bis auf die Zeiten, die Temperatur und die Objekt-ID.

                        Das möchte ich halt vereinfachen, wie das in einem guten Programm so üblich ist.

                        --

                        Gruß
                        Uwe.

                        CodierknechtC 1 Reply Last reply
                        0
                        • A acme2020

                          @DJMarc75
                          Unitec Thermostate, Aqara Fenstersensoren, Benachrichtigung an Signal (Telegram und WhatsApp sind absolutes No-Go) über CallMeBot API. Das funktioniert auch alles wunderbar, so wie ich mir das vorstelle.

                          6 Uhr z.B. stellt der Thermostat im Wohnzimmer 22 Grad ein und um 22 Uhr auf 18 Grad. Ich habe zur Zeit 6 Thermostate laufen, die ähnlich schalten. Ich möchte gern eine Funktion separat haben, die ich mit Parametern (Temperatur, ZigBee Objekt, Text, usw.) aufrufen kann, damit ich das nicht zig-mal in die Scripte kopieren muss. Die Scripte für jeden Thermostat sind ja fast gleich, bis auf die Zeiten, die Temperatur und die Objekt-ID.

                          Das möchte ich halt vereinfachen, wie das in einem guten Programm so üblich ist.

                          --

                          Gruß
                          Uwe.

                          CodierknechtC Online
                          CodierknechtC Online
                          Codierknecht
                          Developer Most Active
                          wrote on last edited by
                          #12

                          @acme2020
                          Die Lösung wurde ja auch schon vor fast 5 Jahren genannt: JS in "global".

                          @paul53 sagte in Blockly und Funktionen:

                          Ja, wenn Du schon so professionell rangehst, dann solltest Du in Javascript programmieren. In JS kann man oft verwendete eigene Funktionen innerhalb von Skripten unter der Gruppe "global" erstellen. Diese Funktionen stehen in jedem (nicht globalen) Skript zur Verfügung, da sie dort automatisch reinkopiert werden.

                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                          Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                          HmIP|ZigBee|Tasmota|Unifi
                          Zabbix Certified Specialist
                          Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                          A 1 Reply Last reply
                          0
                          • CodierknechtC Codierknecht

                            @acme2020
                            Die Lösung wurde ja auch schon vor fast 5 Jahren genannt: JS in "global".

                            @paul53 sagte in Blockly und Funktionen:

                            Ja, wenn Du schon so professionell rangehst, dann solltest Du in Javascript programmieren. In JS kann man oft verwendete eigene Funktionen innerhalb von Skripten unter der Gruppe "global" erstellen. Diese Funktionen stehen in jedem (nicht globalen) Skript zur Verfügung, da sie dort automatisch reinkopiert werden.

                            A Offline
                            A Offline
                            acme2020
                            wrote on last edited by
                            #13

                            @codierknecht
                            Das hab ich wohl glesen, bekomme ich aber irgendwie nicht hin. Wie rufe ich denn so eine Funktion mit Parametern auf? Hast du mal ein konkretes Beispiel, das ich als Vorlage nehmen kann?

                            CodierknechtC paul53P 2 Replies Last reply
                            0
                            • A acme2020

                              @codierknecht
                              Das hab ich wohl glesen, bekomme ich aber irgendwie nicht hin. Wie rufe ich denn so eine Funktion mit Parametern auf? Hast du mal ein konkretes Beispiel, das ich als Vorlage nehmen kann?

                              CodierknechtC Online
                              CodierknechtC Online
                              Codierknecht
                              Developer Most Active
                              wrote on last edited by Codierknecht
                              #14

                              @acme2020
                              In "global" habe ich eine Funktion zum Versenden von Nachrichten via Signal:

                              function sendSignalMessage(aText, aNumber) {
                                  if (aNumber == '') aNumber = mobileNumber;
                                  sendTo("signalclirestapiclient.0", "send", {
                                      "text": aText,
                                      "numbers": [aNumber]
                                  });
                              }
                              

                              Die kann ich jetzt in jedem anderen Script aufrufen:

                              function Blubb() {
                                  message += (message != '' ? '\n' : '') + 'ACHTUNG: Frostgefahr am ' + wochentag;
                                  message += '\nTemperatur: ' + obj.state.val + ' °C';
                                  await sendSignalMessage(message, mobileNumber);
                              }
                              

                              Auch mobileNumber ist als Konstante nur einmal im globalen Script angelegt und kann überall verwendet werden.

                              Wie @paul53 aber bereits vor Jahren schrieb: Geht nur am besten in JS!
                              In Blockly müsstest Du Dir jeweils wieder eine Wrapper-Funktion in JS schreiben. Da ist der Nutzen bei so ein paar Zeilen schon fast wieder dahin.

                              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                              Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                              HmIP|ZigBee|Tasmota|Unifi
                              Zabbix Certified Specialist
                              Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                              A 1 Reply Last reply
                              0
                              • CodierknechtC Codierknecht

                                @acme2020
                                In "global" habe ich eine Funktion zum Versenden von Nachrichten via Signal:

                                function sendSignalMessage(aText, aNumber) {
                                    if (aNumber == '') aNumber = mobileNumber;
                                    sendTo("signalclirestapiclient.0", "send", {
                                        "text": aText,
                                        "numbers": [aNumber]
                                    });
                                }
                                

                                Die kann ich jetzt in jedem anderen Script aufrufen:

                                function Blubb() {
                                    message += (message != '' ? '\n' : '') + 'ACHTUNG: Frostgefahr am ' + wochentag;
                                    message += '\nTemperatur: ' + obj.state.val + ' °C';
                                    await sendSignalMessage(message, mobileNumber);
                                }
                                

                                Auch mobileNumber ist als Konstante nur einmal im globalen Script angelegt und kann überall verwendet werden.

                                Wie @paul53 aber bereits vor Jahren schrieb: Geht nur am besten in JS!
                                In Blockly müsstest Du Dir jeweils wieder eine Wrapper-Funktion in JS schreiben. Da ist der Nutzen bei so ein paar Zeilen schon fast wieder dahin.

                                A Offline
                                A Offline
                                acme2020
                                wrote on last edited by
                                #15

                                @codierknecht
                                Danke, schau ich mir morgen mal an.

                                Ich schicke die Nachricht an Signal aus Blockly bisher immer per Request URL an https://api.callmebot.com/signal/send.php?phone=+491741234567&apikey=123456&text="Nachricht". So brauche ich keinen Adapter dafür. Klappt prima.

                                CodierknechtC 1 Reply Last reply
                                0
                                • A acme2020

                                  @codierknecht
                                  Das hab ich wohl glesen, bekomme ich aber irgendwie nicht hin. Wie rufe ich denn so eine Funktion mit Parametern auf? Hast du mal ein konkretes Beispiel, das ich als Vorlage nehmen kann?

                                  paul53P Offline
                                  paul53P Offline
                                  paul53
                                  wrote on last edited by
                                  #16

                                  @acme2020 sagte: ein konkretes Beispiel

                                  Siehe hier.

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  A 1 Reply Last reply
                                  0
                                  • A acme2020

                                    @codierknecht
                                    Danke, schau ich mir morgen mal an.

                                    Ich schicke die Nachricht an Signal aus Blockly bisher immer per Request URL an https://api.callmebot.com/signal/send.php?phone=+491741234567&apikey=123456&text="Nachricht". So brauche ich keinen Adapter dafür. Klappt prima.

                                    CodierknechtC Online
                                    CodierknechtC Online
                                    Codierknecht
                                    Developer Most Active
                                    wrote on last edited by
                                    #17

                                    @acme2020 sagte in Blockly und Funktionen:

                                    So brauche ich keinen Adapter dafür. Klappt prima

                                    Das wird über eine meiner eigenen Rufnummern mit eigener SIM gesendet. Das geht nicht per CallMeBot ;-)

                                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

                                    Proxmox 9.1.1 LXC|8 GB|Core i7-6700
                                    HmIP|ZigBee|Tasmota|Unifi
                                    Zabbix Certified Specialist
                                    Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

                                    1 Reply Last reply
                                    0
                                    • paul53P paul53

                                      @acme2020 sagte: ein konkretes Beispiel

                                      Siehe hier.

                                      A Offline
                                      A Offline
                                      acme2020
                                      wrote on last edited by
                                      #18

                                      @paul53
                                      Super, danke.:+1:

                                      A 1 Reply Last reply
                                      0
                                      • A acme2020

                                        @paul53
                                        Super, danke.:+1:

                                        A Offline
                                        A Offline
                                        acme2020
                                        wrote on last edited by
                                        #19

                                        Ich habe eine andere, wie ich glaube, elegante Lösung gefunden, die ohne Pogrammierung in JavaScript auskommt.

                                        Ich habe mir fürs Senden nach Signal ein normales Blockly Script (_SendToSignal) geschrieben, was einfach ein paar extra dafür eingerichtete Datenpunkte (0_userdata.0.SendToSignal.SendStat, 0_userdata.0.SendToSignal.Text) überwacht. Wenn irgendein beliebiges Script, auch Blockly, den Datenpunkt SendStat auf true setzt, sendet das Script den String in Text an Signal und setzt SendStat auf false. Das wars. Total einfach im Handling.

                                        Sowas kann man mit beliebigen Funktionen erledigen, die in mehreren Scripn gleich sind. Das baue ich mir jetzt noch für die Thermostateinstellung und gut ist.

                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        603

                                        Online

                                        32.7k

                                        Users

                                        82.4k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Home
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe