Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Mail mit mehr als 2 Anhängen?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Mail mit mehr als 2 Anhängen?

    This topic has been deleted. Only users with topic management privileges can see it.
    • thewhobox
      thewhobox @lost in translation last edited by

      @lost-in-translation Nein da hast nen kleinen Fehler drin.

      attachments: Bilder
      

      ich nehem mal an, dass die Variable Bilder bereits eine Array ist.

      lost in translation 1 Reply Last reply Reply Quote 0
      • lost in translation
        lost in translation @thewhobox last edited by

        @thewhobox

        Hmm.
        mal geändert:
        e63cf017-fdd2-420c-b054-8539bf558de5-image.png
        und

        sendTo("email", {
            from:    Absender,
            to:      Empfaenger,
            subject: Betreff,
            // html: "<p>Embedded image: <img src='cid:image1'/></p>",
            html: HTML,
              //  {path: "path/to/file/image1.jpg", cid: "image1"}
              //  {path: "path/to/file/image2.jpg", cid: "image2"}
           attachments: Bilder
        });
        

        Hat jetzt auch nicht den gewünschten Erfolg 😞

        Ich bräuchte mal ein Beispiel mit 2 oder besser 3 Attachments, wo die Filepaths per Variable an die Funktion rüberkommen.

        stell mich grad etwas blöd an. 😞

        ciao

        frank

        thewhobox 2 Replies Last reply Reply Quote 0
        • thewhobox
          thewhobox @lost in translation last edited by

          @lost-in-translation Du übergibst ihm einen reinen Text, das musst du noch in ein Object konvertieren.

          attachments: JSON.parse(Bilder);
          

          Bei "erstelle Text aus" musst du path und cid in Anführungszeichen packen.
          also:

          [{"path": "
          dateipfad1
          ", "cid": "image1"}, //Hier das Komma nicht vergessen
          [{"path": "
          dateipfad2
          ", "cid": "image2"}]
          

          Danach sollte es funktionieren.

          1 Reply Last reply Reply Quote 0
          • thewhobox
            thewhobox @lost in translation last edited by thewhobox

            @lost-in-translation Ich hab da mal schnell was zusammengeworfen:
            b2272d72-94eb-4430-b085-031e433ea123-grafik.png

            var attaches = [];
            
            for(var bild in bilder) {
                attaches.push({path: bilder[bild], cid: "image" + bild});
            }
            
            console.log(JSON.stringify(attaches));
            
            sendTo("email", {
                from:    von,
                to:      an,
                subject: betreff,
                html: text,
               attachments: attaches
            });
            

            <xml xmlns="http://www.w3.org/1999/xhtml">
              <variables>
                <variable type="" id="~l@e!9OC1|4+g+U-JTZB">von</variable>
                <variable type="" id="_?dVQ*D,vJ)^s+HYjA2)">an</variable>
                <variable type="" id="HD0=-,oTf7RRdn7y;?PR">betreff</variable>
                <variable type="" id="eW@e*#2FAy?-0:H%Ac)J">text</variable>
                <variable type="" id=")`gfy$TzS213`(Zg^h?V">bilder</variable>
                <variable type="" id="hUY]Ldy*s?G:gWauwJp$">bild1</variable>
              </variables>
              <block type="procedures_callcustomnoreturn" id="`^-.85s*w*VmfN5.4V5N" x="113" y="115">
                <mutation name="sendmail">
                  <arg name="von"></arg>
                  <arg name="an"></arg>
                  <arg name="betreff"></arg>
                  <arg name="text"></arg>
                  <arg name="bilder"></arg>
                </mutation>
                <value name="ARG0">
                  <block type="text" id="/Zz+J^i9+;bI=J~?-K@r">
                    <field name="TEXT">mir</field>
                  </block>
                </value>
                <value name="ARG1">
                  <block type="text" id="=nIv*ca@dlHYX?nzLdFb">
                    <field name="TEXT">dich</field>
                  </block>
                </value>
                <value name="ARG2">
                  <block type="text" id="`e_PykiCeMKOpIj=/Xy$">
                    <field name="TEXT">über uns</field>
                  </block>
                </value>
                <value name="ARG3">
                  <block type="text" id="yIg#u@b2M@oom=Q7X;u8">
                    <field name="TEXT">Was geht so?</field>
                  </block>
                </value>
                <value name="ARG4">
                  <block type="lists_create_with" id="m}.BdOL=b*~;JojyBA;^">
                    <mutation items="2"></mutation>
                    <value name="ADD0">
                      <block type="variables_get" id="ZoxcQU%bvj6ic0K@~X(H">
                        <field name="VAR" id="hUY]Ldy*s?G:gWauwJp$" variabletype="">bild1</field>
                      </block>
                    </value>
                    <value name="ADD1">
                      <block type="variables_get" id="[KIdA/e{@s]c]zMq?Q]v">
                        <field name="VAR" id=")`gfy$TzS213`(Zg^h?V" variabletype="">bilder</field>
                      </block>
                    </value>
                  </block>
                </value>
              </block>
              <block type="procedures_defcustomnoreturn" id="//81$GAbGVi[!{GnX=;f" x="88" y="363">
                <mutation statements="false">
                  <arg name="von" varid="~l@e!9OC1|4+g+U-JTZB"></arg>
                  <arg name="an" varid="_?dVQ*D,vJ)^s+HYjA2)"></arg>
                  <arg name="betreff" varid="HD0=-,oTf7RRdn7y;?PR"></arg>
                  <arg name="text" varid="eW@e*#2FAy?-0:H%Ac)J"></arg>
                  <arg name="bilder" varid=")`gfy$TzS213`(Zg^h?V"></arg>
                </mutation>
                <field name="NAME">sendmail</field>
                <field name="SCRIPT">dmFyIGF0dGFjaGVzID0gW107DQoNCmZvcih2YXIgYmlsZCBpbiBiaWxkZXIpIHsNCiAgICBhdHRhY2hlcy5wdXNoKHtwYXRoOiBiaWxkZXJbYmlsZF0sIGNpZDogImltYWdlIiArIGJpbGR9KTsNCn0NCg0KY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYXR0YWNoZXMpKTsNCg0Kc2VuZFRvKCJlbWFpbCIsIHsNCiAgICBmcm9tOiAgICB2b24sDQogICAgdG86ICAgICAgYW4sDQogICAgc3ViamVjdDogYmV0cmVmZiwNCiAgICBodG1sOiB0ZXh0LA0KICAgYXR0YWNobWVudHM6IGF0dGFjaGVzDQp9KTs=</field>
                <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
              </block>
            </xml>
            

            lost in translation 1 Reply Last reply Reply Quote 0
            • lost in translation
              lost in translation @thewhobox last edited by lost in translation

              @thewhobox said in Mail mit mehr als 2 Anhängen?:

              var attaches = []; for(var bild in bilder) { attaches.push({path: bilder[bild], cid: "image" + bild}); } console.log(JSON.stringify(attaches)); sendTo("email", { from: von, to: an, subject: betreff, html: text, attachments: attaches });

              Ich stelle mich gerade blöd an. Was soll denn in die Liste?
              b73cfdf5-2423-497b-b014-e0e5692ec686-image.png
              bedankt sich mit Fehlermeldung:

              23:16:58.770	error	javascript.0 script.js.Kameras.Maile_Bilder: ReferenceError: bilder is not defined
              23:16:58.770	error	javascript.0 at sendmail (script.js.Kameras.Maile_Bilder:9:21)
              23:16:58.770	error	javascript.0 at script.js.Kameras.Maile_Bilder:48:5
              

              Was kommt denn da genau rein?

              ciao
              frank

              thewhobox 1 Reply Last reply Reply Quote 0
              • thewhobox
                thewhobox @lost in translation last edited by

                @lost-in-translation der Parameter Bilder ist jetzt ein array (also eine Liste) in der nur der Pfad drin ist.
                Also: dateiimpfad = /mnt/meintollerpfad/x.jpeg

                Wenn du oben rechts auf Blockly=>JS klickt. Was steht da in Zeile 9?

                lost in translation 1 Reply Last reply Reply Quote 0
                • lost in translation
                  lost in translation @thewhobox last edited by

                  @thewhobox

                  73dd3523-480a-4291-bdc3-848d60d3693c-image.png

                  Ich vermute, ein Groß/Kleinschreibungs Problem.

                  Versuche ich mal zu korrigieren.

                  ciao

                  frank

                  thewhobox 1 Reply Last reply Reply Quote 0
                  • thewhobox
                    thewhobox @lost in translation last edited by

                    @lost-in-translation Ja hast recht. Ist ein Groß/Kleinschreibfehler.

                    ändere "for(var bild in Bilder) {"
                    das muss ein großes B sein.

                    Ich schreibe bei mir deswegen generell alles klein.

                    lost in translation 1 Reply Last reply Reply Quote 0
                    • lost in translation
                      lost in translation @thewhobox last edited by

                      @thewhobox
                      das hat soweit geklappt, nun renne ich in das nächste Rätsel
                      f5b3257c-8b5e-471f-96f1-26ad11d23d96-image.png
                      Der Plan: ich speichere die vermailten Dateien zusätzlich auf dem NAS und lösche sie dann
                      Im ersten Wurf hatte ich einen eigenen exec für den rm, dann war da immer nur der letzte Dateiname drin.
                      Dann habe ich es einfach in einen Befehl aneinandergehängt, was grundsätzlich klappte, aber anscheinend zu viele scp Befehle parallel provozierte. Zufällige Dateien kamen nicht auf dem NAS an. Also wollte ich die Schleife mit angezogener Handbremse durchlaufen, und nur alle 100ms einen SCP absetzen. Jetzt haben aber alle scp den letzten Dateinamen aus der Liste zum Inhalt. What the f...?

                      Irgendwie ist mir die Logik bei Blockly noch fremd. Und warum habe ich in der Konstellation nicht alle Dateinamen, sondern nur den letzten?

                      ciao
                      frank

                      thewhobox 1 Reply Last reply Reply Quote 0
                      • thewhobox
                        thewhobox @lost in translation last edited by

                        @lost-in-translation das liegt an Javascript. Die Schleife wartet nicht auf das Timeout sondern macht munter weiter und ist schon lange fertig, wenn der erste Timeout abläuft.
                        Aber auch die Idee ist nicht zielführend, da mit dem Timeout auch einfach alle Befehle gleichzeitig nach 100ms ausgeführt werden.

                        Ich schaue es mir später nochmal in Ruhe an

                        lost in translation 1 Reply Last reply Reply Quote 0
                        • lost in translation
                          lost in translation @thewhobox last edited by

                          @thewhobox
                          Irgendwie ist der exec untauglich für Schleifen. Weil der ist einfach zu Ende und die Schleife geht in die nächste Runde, egal wie lange der aufgerufene Befehl benötigt.
                          Und "Innendrin" ist ja auch Banane, dann hab ich keine Schleife. Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten. Oder übersehe ich etwas Entscheidendes?

                          ciao

                          Frank

                          AlCalzone 1 Reply Last reply Reply Quote 0
                          • AlCalzone
                            AlCalzone Developer @lost in translation last edited by

                            @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                            Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

                            Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

                            lost in translation 1 Reply Last reply Reply Quote 0
                            • lost in translation
                              lost in translation @AlCalzone last edited by

                              @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                              @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                              Wenn man etwas mehrfach durchführen will, aber Bitteschön hintereinander, dann kann man nur eine ineinander geschachtelte copy paste Orgie veranstalten.

                              Fürchte ja. Oder du lernst "richtiges" Javascript, wo du mit Promises und async/await arbeiten kannst. Da würde auch der Ansatz mit der Schleife funktionieren, wie du dir das vorgestellt hast.

                              Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt? Ich habe vor ein paar Jahren schonmal javascript genutzt, grundsätzlich habe ich da keine Berührungsängste. Ich hatte halt hier das Tool so wie es vorgesehen ist nutzen wollen. Bei neoload habe ich javascript halt im wesentlichen dazu genutzt, Werte umzurechnen, oder Strings zu verknüpfen. Schleifen waren da nie nötig.
                              Diese "alles auf einmal loswerfen" Strategie ist mir fremd. Ich hatte es bisher mit eher sequentiellen Skripten zu tun.

                              Das Blockly mit 50 Bildern nacheinander, das ich gestern gebaut habe, ist fast schon uneditierbar, so langsam wird der Editor im Browser.

                              ciao

                              frank

                              AlCalzone 1 Reply Last reply Reply Quote 0
                              • AlCalzone
                                AlCalzone Developer @lost in translation last edited by AlCalzone

                                @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                                Hast Du evt. ein Beispielscript, dass ein solches Konstrukt nutzt?

                                Nein, aber ich kann dir schreiben wie es in etwa aussieht. Benötigt allerdings Node 8+:

                                const util = require('util');
                                // promisify wandelt exec in eine Funktion um, die einen Promise zurückgibt,
                                // anstatt einen Callback aufzurufen.
                                const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß
                                
                                // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                                async function befehleAusfuehren() {
                                  // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                                  // dass nur das letzte Bild hochgeladen wird
                                  for (let i = 0; i < 20; i++) {
                                    // await hält die Funktion an, bis execAsync wirklich fertig ist
                                    await execAsync("Befehl...");
                                  }
                                  // Code hier wird nach allen exec-Befehlen ausgeführt.
                                }
                                
                                // Nicht vergessen, die Funktion auch aufzurufen:
                                befehleAusfuehren();
                                // Der Code hiernach wird wieder asynchron ausgeführt und wartet nicht auf die execs
                                

                                Alternativ gäbe es noch execSync, damit kannst du dir bei langen Prozessen aber die Event Loop blockieren und ggf. für Adapter-Neustarts und Geister-Prozesse sorgen.

                                lost in translation 1 Reply Last reply Reply Quote 0
                                • lost in translation
                                  lost in translation @AlCalzone last edited by

                                  @AlCalzone said in Mail mit mehr als 2 Anhängen?:

                                  const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß

                                  scheitere gerade bereits an dieser Zeile:
                                  const execAsync = util.promisify(exec); // exec ist schon geladen, soweit ich weiß

                                  Ich vermute, es hängt damit zusammen, dass ich keinerlei Ahnung habe was node8+ ist und wie ich checken kann ob ich das habe und was ich tun muss, wenn ich das haben will.

                                  naja, mühsam...

                                  1 Reply Last reply Reply Quote 0
                                  • lost in translation
                                    lost in translation last edited by

                                    var von, an, betreff, text, bilder, Bildzaehler, wgetsleeptime, MailSender, EmailEmpfaenger, Bilderpfad, Name_Kamera1, Name_Kamera2, IP_Kamera1, IP_Kamera2, IP_NAS, UserName_NAS, NAS_Zielpfad, Name_Kamera, IP_Kamera, Bilderliste, datum, zeit, dateiname_1, dateimitpfad1, dateiname_2, dateimitpfad2, i;
                                    /**
                                     * Beschreibe diese Funktion …
                                     */
                                    function sendmail(von, an, betreff, text, bilder) {
                                        var attaches = [];
                                        
                                        for(var bild in bilder) {
                                            attaches.push({path: bilder[bild], cid: "image" + bild});
                                        }
                                        
                                        console.log(JSON.stringify(attaches));
                                        
                                        sendTo("email", {
                                            from:    von,
                                            to:      an,
                                            subject: betreff,
                                            html: text,
                                           attachments: attaches
                                        });
                                    }
                                    
                                    function listsRepeat(value, n) {
                                      var array = [];
                                      for (var i = 0; i < n; i++) {
                                        array[i] = value;
                                      }
                                      return array;
                                    }
                                    
                                    
                                    Bildzaehler = 0;
                                    wgetsleeptime = 0.3;
                                    MailSender = 'iobroker@meinedomain.de';
                                    EmailEmpfaenger = 'ich@meinedomain.de';
                                    Bilderpfad = '/opt/iobroker/kameras/';
                                    Name_Kamera1 = 'xx';
                                    Name_Kamera2 = 'yy';
                                    IP_Kamera1 = '192.168.xx.nn';
                                    IP_Kamera2 = '192.168.yy.nn';
                                    IP_NAS = '192.168.yy.nn';
                                    UserName_NAS = 'gandalf_der_zarte';
                                    NAS_Zielpfad = '/vol1/files/Bilder/Kameras/';
                                    Name_Kamera = Name_Kamera1;
                                    IP_Kamera = IP_Kamera1;
                                    Bilderliste = listsRepeat('/opt/iobroker/kameras/noimage.jpg', 1);
                                    datum = formatDate(new Date(), "JJJJ-MM-TT");
                                    // Ab hier Bilder holen
                                    zeit = formatDate(new Date(), "SS.mm.ss");
                                    dateiname_1 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'_',Bildzaehler,'.jpg'].join('');
                                    dateimitpfad1 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_1].join('');
                                    exec((['wget --output-document ',dateimitpfad1,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\''].join('')), function (error, result, stderr) {
                                        Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad1);
                                      Name_Kamera = Name_Kamera2;
                                      IP_Kamera = IP_Kamera2;
                                      Bildzaehler = (typeof Bildzaehler == 'number' ? Bildzaehler : 0) + 1;
                                      zeit = formatDate(new Date(), "SS.mm.ss");
                                      dateiname_2 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'_',Bildzaehler,'.jpg'].join('');
                                      dateimitpfad2 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_2].join('');
                                      exec((['wget --output-document ',dateimitpfad2,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\'','  &&sleep ' + String(wgetsleeptime)].join('')), function (error, result, stderr) {
                                          Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad2);
                                        Name_Kamera = Name_Kamera1;
                                        IP_Kamera = IP_Kamera1;
                                        Bildzaehler = (typeof Bildzaehler == 'number' ? Bildzaehler : 0) + 1;
                                    // hier Bilder geholt    
                                    Bilderliste.pop();
                                    sendmail(MailSender, EmailEmpfaenger, 'Testbetreff', 'TestBilder', Bilderliste);
                                    for (var i_index in Bilderliste) {
                                        i = Bilderliste[i_index];
                                        exec(([['sleep ',10 + Math.random() * 5,' && scp '].join(''),i,[' ',UserName_NAS,'@',IP_NAS,':',NAS_Zielpfad,'Haustuer/'].join(''),datum,'/ && rm ' + String(i)].join('')));
                                        console.log("exec: " + ([['sleep ',10 + Math.random() * 5,' && scp '].join(''),i,[' ',UserName_NAS,'@',IP_NAS,':',NAS_Zielpfad,'Haustuer/'].join(''),datum,'/ && rm ' + String(i)].join('')));
                                        };
                                      })})
                                                                                                                
                                    
                                    

                                    Hab ich jetzt mal aus der Javascript Ansicht meines Blockly kopiert und es schickt eine Mail mit 2 Attachements. Jetzt müsste ich ja eigentlich "nur noch" diese Abhängigkeit auflösen und stattdessen mit dem await hantieren.

                                    Es ist fast zu einfach...

                                    Frank

                                    1 Reply Last reply Reply Quote 0
                                    • lost in translation
                                      lost in translation last edited by

                                      Meinst Du mit Node 8+ das hier:

                                      /opt/iobroker$ node --version

                                      v8.16.0

                                      ?

                                      ciao
                                      frank

                                      AlCalzone 1 Reply Last reply Reply Quote 0
                                      • AlCalzone
                                        AlCalzone Developer @lost in translation last edited by

                                        @lost-in-translation sagte in Mail mit mehr als 2 Anhängen?:

                                        Meinst Du mit Node 8+ das hier:

                                        ja!

                                        Ich bin mir gerade nicht sicher, wo du hängst. Am besten mal ein Minimalbeispiel posten (ohne überflüssigen Schnickschnack).

                                        lost in translation 1 Reply Last reply Reply Quote 0
                                        • lost in translation
                                          lost in translation @AlCalzone last edited by

                                          @AlCalzone

                                          // Du brauchst eine async-Funktion, die kannst du aber normal aufrufen
                                          async function wgetsfeuern() {
                                           // wichtig: let für block-scoped Variablen, sonst hast du den Ärger, 
                                           // dass nur das letzte Bild hochgeladen wird
                                           for (let i = 0; i < 20; i++) {
                                             zeit = formatDate(new Date(), "SS.mm.ss");
                                             dateiname_1 = [datum,'_',zeit,'_','Uhr_',Name_Kamera,'__',i,'.jpg'].join('');
                                             dateimitpfad1 = [Bilderpfad,Name_Kamera.toLowerCase(),'/',dateiname_1].join('');
                                             Bilderliste.splice(((Bilderliste.indexOf('/opt/iobroker/kameras/noimage.jpg') + 1) - 1), 0, dateimitpfad1);
                                             // await hält die Funktion an, bis execAsync wirklich fertig ist
                                             await execAsync(['wget --output-document ',dateimitpfad1,' \'http://',IP_Kamera,'/media/?user=admin&pwd=&action=snapshot\'', '  &&sleep ' + String(wgetsleeptime)].join(''));
                                           }
                                           // Code hier wird nach allen exec-Befehlen ausgeführt.
                                          }
                                          
                                          
                                          

                                          Das läuft soweit, dass alle Dateien auf dem Raspi rumliegen, aber aus mir nicht erkennbaren Gründen wird die List nicht entsprechend erweitert und es wird dadurch weder gemailt, noch kopiert.

                                          Das mit dem alles gleichzeitig losfeuern ist total lästig, wenn man sequentiell denkt. Und Schleifen sind für mich sequentiell.

                                          ciao

                                          frank

                                          AlCalzone 1 Reply Last reply Reply Quote 0
                                          • AlCalzone
                                            AlCalzone Developer @lost in translation last edited by

                                            @lost-in-translation
                                            Du hast eine komische Art, Strings zu verbinden. Erinnert mich irgendwie an Matlab.
                                            Und das +1 - 1 versteh ich auch nicht. Ist es wichtig, wo die Bilder in der Liste eingefügt werden? Am Ende täte es auch ein .push(...)

                                            Um ganz sicher zu gehen: Du rufst die Funktion auch auf, oder? Und wo verarbeitest du die Bilderliste? Nach dem Kommentar in Zeile 13 oder komplett außerhalb der Funktion? Letzeres wird auch mehr oder weniger sofort ausgeführt, ohne auf die wgets zu warten.

                                            lost in translation 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            400
                                            Online

                                            31.9k
                                            Users

                                            80.3k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly communication
                                            4
                                            37
                                            1631
                                            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