Navigation

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

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Blockly und Funktionen

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

      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 Reply Quote 0
      • rantanplan
        rantanplan last edited by

        @Plasmachef:

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

        Wird es auch wohl nie geben.

        Grüße

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

          @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.

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

            @paul53:

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

            Grüße

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

              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 Reply Quote 0
              • AlCalzone
                AlCalzone Developer last edited by

                @rantanplan:

                @paul53:

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

                A 1 Reply Last reply Reply Quote 0
                • A
                  acme2020 @AlCalzone last edited by

                  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.

                  DJMarc75 1 Reply Last reply Reply Quote 0
                  • DJMarc75
                    DJMarc75 @acme2020 last edited by

                    @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 1 Reply Last reply Reply Quote 0
                    • A
                      acme2020 @DJMarc75 last edited by

                      @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.

                      Codierknecht 1 Reply Last reply Reply Quote 0
                      • Codierknecht
                        Codierknecht Developer Most Active @acme2020 last edited by

                        @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 1 Reply Last reply Reply Quote 0
                        • A
                          acme2020 @Codierknecht last edited by

                          @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?

                          Codierknecht paul53 2 Replies Last reply Reply Quote 0
                          • Codierknecht
                            Codierknecht Developer Most Active @acme2020 last edited by 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 1 Reply Last reply Reply Quote 0
                            • A
                              acme2020 @Codierknecht last edited by

                              @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.

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

                                @acme2020 sagte: ein konkretes Beispiel

                                Siehe hier.

                                A 1 Reply Last reply Reply Quote 0
                                • Codierknecht
                                  Codierknecht Developer Most Active @acme2020 last edited by

                                  @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 😉

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

                                    @paul53
                                    Super, danke.👍

                                    A 1 Reply Last reply Reply Quote 0
                                    • A
                                      acme2020 @acme2020 last edited by

                                      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 Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      830
                                      Online

                                      31.7k
                                      Users

                                      79.8k
                                      Topics

                                      1.3m
                                      Posts

                                      7
                                      19
                                      4455
                                      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