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. JavaScript
  5. Funktionsrückgabewert = Skript und nicht Ergebniss

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Funktionsrückgabewert = Skript und nicht Ergebniss

Geplant Angeheftet Gesperrt Verschoben JavaScript
11 Beiträge 3 Kommentatoren 647 Aufrufe 1 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.
  • E etzeste13

    Hallo,

    ich habe ein Problem mit einen Skript un komme nicht auf die Lösung. Gleich zu Beginn mein Geständniss, ich bin keine JS Profi, sondern viel nach try and error und, wie würde es ein blockly skript machen.

    Jetzt stehe ich aber an und frage mich warum der Rückgabewert meiner function "getACgesamt" im Log der code der funktion getACgesamt ist, und nicht die Summe der SPannungswerte der einzelnen Wechselrichter --> hier der Screenshot aus dem LOG:
    de15516e-8cc9-4760-b5ea-dcdd47db2035-grafik.png

    Nachfolgend auch noch das gesamte Skript.

    async function getACgesamt() {
        var wr_ost1 = 92932006106226;       //WR-Seriennummern definieren
        var wr_ost2 = 92932007107063;
        var wr_sued1 = 92932007107055;
        var wr_sued2 = 92932007102044;
        var wr_west1 = 92932007107053;
        var wr_west2 = 92932006106237;
    
        var ACin_L1_1, ACin_L1_2, ACin_L2_1, ACin_L2_2, ACin_L3_1, ACin_L3_2, AC_ges;
        var WrSerNr = 0;
    
        // Selektion und Zuteilung der Wechselricher auf die Phasen
        for (var i = 1; i < 7; i++) {       // 6 durchläufe um alle WR Abzufragen 
            WrSerNr = getState("mqtt.0.solpiplog.pip" + i + ".serial").val;     //SerNr des aktuellen WR abfragen
            console.log(WrSerNr);
            //Nun kommt die if Schleife um die WR basierend auf der Seriennummer der Phase zuzuordnen
            if (WrSerNr == wr_ost1) {
                ACin_L1_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            } else if (WrSerNr == wr_ost2) {
                ACin_L1_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            } else if (WrSerNr == wr_sued1) {
                ACin_L2_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            } else if (WrSerNr == wr_sued2) {
                ACin_L2_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            } else if (WrSerNr == wr_west1) {
                ACin_L3_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            } else if (WrSerNr == wr_west2) {
                ACin_L3_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                
            }
        }
    
    AC_ges = ACin_L1_1 + ACin_L1_2 + ACin_L2_1 + ACin_L2_2 + ACin_L3_1 + ACin_L3_2;
        
    return AC_ges;
    }
    
       
    
    //Nun alle 30 Sek status der ACin-Werte abfragen
    
    schedule("*/30 * * * * *", async function () {
        var AC_Sum; 
    
        AC_Sum = getACgesamt;
        console.log(AC_Sum);  
        if (AC_Sum < 1290) {    // Wenn Summe ACin kleiner als 215Vx6=1290V
            await wait(10000);    // 10 sec warten und nochmals checken
            AC_Sum = getACgesamt;
            if (AC_Sum < 1290) {
                setState('rpi2.1.gpio.23.state' /* GPIO 23 */, false);  //Externe WP-Abschaltung aktivieren
            }
    
        }
    });
    

    UseCase: Es soll von meinen 6 Wechselrichtern die jeweils anliegende NetzSpannung einlesen, dass ich im Falle eines Stromausfalles die Stromfresser wie die Wärmepumpe usw. abschalten kann, damit der Speicher länger durchhält.

    Hoffe Ihr habt eine Idee..

    Danke und vG Etze

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von
    #2

    @etzeste13 sagte: Ihr habt eine Idee..

    Klammern in Zeile 50 vergessen:

        AC_Sum = getACgesamt();
    

    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

    E 2 Antworten Letzte Antwort
    1
    • paul53P paul53

      @etzeste13 sagte: Ihr habt eine Idee..

      Klammern in Zeile 50 vergessen:

          AC_Sum = getACgesamt();
      
      E Offline
      E Offline
      etzeste13
      schrieb am zuletzt editiert von
      #3

      @paul53
      Hallo Paul,
      funktioniert natürlich!! Vielen Dank für Wink. Machmal siehr man den Wald vor lauter Bäumen nicht....:face_palm:

      1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @etzeste13 sagte: Ihr habt eine Idee..

        Klammern in Zeile 50 vergessen:

            AC_Sum = getACgesamt();
        
        E Offline
        E Offline
        etzeste13
        schrieb am zuletzt editiert von
        #4

        @paul53
        Hallo, jetzt hat sich gleich noch eine Frage ergeben aus der ich nicht schlau werde...
        Ich lasse zur Kontrolle den Ausgabewert der Funktion innerhalb der Funktion ausgeben... und mache das gleiche nochmal in der Hauptschleife. Interessanterweise habe ich da keinen Wert im Log? hast du auch hier einen Wink für mich?

        7ddf749a-3142-47aa-89c5-a83035d77502-grafik.png

        async function getACgesamt() {
            var wr_ost1 = 92932006106226;       //WR-Seriennummern definieren
            var wr_ost2 = 92932007107063;
            var wr_sued1 = 92932007107055;
            var wr_sued2 = 92932007102044;
            var wr_west1 = 92932007107053;
            var wr_west2 = 92932006106237;
        
            var ACin_L1_1, ACin_L1_2, ACin_L2_1, ACin_L2_2, ACin_L3_1, ACin_L3_2, AC_ges;
            var WrSerNr = 0;
        
            // Selektion und Zuteilung der Wechselricher auf die Phasen
            for (var i = 1; i < 7; i++) {       // 6 durchläufe um alle WR Abzufragen 
                WrSerNr = getState("mqtt.0.solpiplog.pip" + i + ".serial").val;     //SerNr des aktuellen WR abfragen
                //console.log(WrSerNr);
                //Nun kommt die if Schleife um die WR basierend auf der Seriennummer der Phase zuzuordnen
                if (WrSerNr == wr_ost1) {
                    ACin_L1_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                } else if (WrSerNr == wr_ost2) {
                    ACin_L1_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                } else if (WrSerNr == wr_sued1) {
                    ACin_L2_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                } else if (WrSerNr == wr_sued2) {
                    ACin_L2_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                } else if (WrSerNr == wr_west1) {
                    ACin_L3_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                } else if (WrSerNr == wr_west2) {
                    ACin_L3_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                    
                }
            }
        
        AC_ges = ACin_L1_1 + ACin_L1_2 + ACin_L2_1 + ACin_L2_2 + ACin_L3_1 + ACin_L3_2;
        console.log(AC_ges);    
        return AC_ges;
        }
        
           
        
        //Nun alle 30 Sek status der ACin-Werte abfragen
        
        schedule("*/30 * * * * *", async function () {
            var AC_Sum; 
        
            AC_Sum = getACgesamt();
            console.log(AC_Sum);  
            if (AC_Sum < 1290) {    // Wenn Summe ACin kleiner als 215Vx6=1290V
                await wait(10000);    // 10 sec warten und nochmals checken
                AC_Sum = getACgesamt;
                if (AC_Sum < 1290) {
                    setState('rpi2.1.gpio.23.state' /* GPIO 23 */, false);  //Externe WP-Abschaltung aktivieren
                }
        
            }
        });
        
        paul53P T 2 Antworten Letzte Antwort
        0
        • E etzeste13

          @paul53
          Hallo, jetzt hat sich gleich noch eine Frage ergeben aus der ich nicht schlau werde...
          Ich lasse zur Kontrolle den Ausgabewert der Funktion innerhalb der Funktion ausgeben... und mache das gleiche nochmal in der Hauptschleife. Interessanterweise habe ich da keinen Wert im Log? hast du auch hier einen Wink für mich?

          7ddf749a-3142-47aa-89c5-a83035d77502-grafik.png

          async function getACgesamt() {
              var wr_ost1 = 92932006106226;       //WR-Seriennummern definieren
              var wr_ost2 = 92932007107063;
              var wr_sued1 = 92932007107055;
              var wr_sued2 = 92932007102044;
              var wr_west1 = 92932007107053;
              var wr_west2 = 92932006106237;
          
              var ACin_L1_1, ACin_L1_2, ACin_L2_1, ACin_L2_2, ACin_L3_1, ACin_L3_2, AC_ges;
              var WrSerNr = 0;
          
              // Selektion und Zuteilung der Wechselricher auf die Phasen
              for (var i = 1; i < 7; i++) {       // 6 durchläufe um alle WR Abzufragen 
                  WrSerNr = getState("mqtt.0.solpiplog.pip" + i + ".serial").val;     //SerNr des aktuellen WR abfragen
                  //console.log(WrSerNr);
                  //Nun kommt die if Schleife um die WR basierend auf der Seriennummer der Phase zuzuordnen
                  if (WrSerNr == wr_ost1) {
                      ACin_L1_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_ost2) {
                      ACin_L1_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_sued1) {
                      ACin_L2_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_sued2) {
                      ACin_L2_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_west1) {
                      ACin_L3_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  } else if (WrSerNr == wr_west2) {
                      ACin_L3_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                      
                  }
              }
          
          AC_ges = ACin_L1_1 + ACin_L1_2 + ACin_L2_1 + ACin_L2_2 + ACin_L3_1 + ACin_L3_2;
          console.log(AC_ges);    
          return AC_ges;
          }
          
             
          
          //Nun alle 30 Sek status der ACin-Werte abfragen
          
          schedule("*/30 * * * * *", async function () {
              var AC_Sum; 
          
              AC_Sum = getACgesamt();
              console.log(AC_Sum);  
              if (AC_Sum < 1290) {    // Wenn Summe ACin kleiner als 215Vx6=1290V
                  await wait(10000);    // 10 sec warten und nochmals checken
                  AC_Sum = getACgesamt;
                  if (AC_Sum < 1290) {
                      setState('rpi2.1.gpio.23.state' /* GPIO 23 */, false);  //Externe WP-Abschaltung aktivieren
                  }
          
              }
          });
          
          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

          @etzeste13 sagte: keinen Wert im Log? hast du auch hier einen Wink für mich?

          Nein, der Wert sollte als erster Eintrag im Log erscheinen.

          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 Antwort Letzte Antwort
          0
          • E etzeste13

            @paul53
            Hallo, jetzt hat sich gleich noch eine Frage ergeben aus der ich nicht schlau werde...
            Ich lasse zur Kontrolle den Ausgabewert der Funktion innerhalb der Funktion ausgeben... und mache das gleiche nochmal in der Hauptschleife. Interessanterweise habe ich da keinen Wert im Log? hast du auch hier einen Wink für mich?

            7ddf749a-3142-47aa-89c5-a83035d77502-grafik.png

            async function getACgesamt() {
                var wr_ost1 = 92932006106226;       //WR-Seriennummern definieren
                var wr_ost2 = 92932007107063;
                var wr_sued1 = 92932007107055;
                var wr_sued2 = 92932007102044;
                var wr_west1 = 92932007107053;
                var wr_west2 = 92932006106237;
            
                var ACin_L1_1, ACin_L1_2, ACin_L2_1, ACin_L2_2, ACin_L3_1, ACin_L3_2, AC_ges;
                var WrSerNr = 0;
            
                // Selektion und Zuteilung der Wechselricher auf die Phasen
                for (var i = 1; i < 7; i++) {       // 6 durchläufe um alle WR Abzufragen 
                    WrSerNr = getState("mqtt.0.solpiplog.pip" + i + ".serial").val;     //SerNr des aktuellen WR abfragen
                    //console.log(WrSerNr);
                    //Nun kommt die if Schleife um die WR basierend auf der Seriennummer der Phase zuzuordnen
                    if (WrSerNr == wr_ost1) {
                        ACin_L1_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    } else if (WrSerNr == wr_ost2) {
                        ACin_L1_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    } else if (WrSerNr == wr_sued1) {
                        ACin_L2_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    } else if (WrSerNr == wr_sued2) {
                        ACin_L2_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    } else if (WrSerNr == wr_west1) {
                        ACin_L3_1 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    } else if (WrSerNr == wr_west2) {
                        ACin_L3_2 =  getState("mqtt.0.solpiplog.pip" + i + ".acin").val;
                        
                    }
                }
            
            AC_ges = ACin_L1_1 + ACin_L1_2 + ACin_L2_1 + ACin_L2_2 + ACin_L3_1 + ACin_L3_2;
            console.log(AC_ges);    
            return AC_ges;
            }
            
               
            
            //Nun alle 30 Sek status der ACin-Werte abfragen
            
            schedule("*/30 * * * * *", async function () {
                var AC_Sum; 
            
                AC_Sum = getACgesamt();
                console.log(AC_Sum);  
                if (AC_Sum < 1290) {    // Wenn Summe ACin kleiner als 215Vx6=1290V
                    await wait(10000);    // 10 sec warten und nochmals checken
                    AC_Sum = getACgesamt;
                    if (AC_Sum < 1290) {
                        setState('rpi2.1.gpio.23.state' /* GPIO 23 */, false);  //Externe WP-Abschaltung aktivieren
                    }
            
                }
            });
            
            T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von ticaki
            #6

            @etzeste13

            Bitte benutze log nicht console.log. Dann verwendet

            log(`Dat ist en Kontrollvalue: ${AC_ges}`);
            
            //Ich verwende fast nur `` strings
            

            Damit man im Log sieht welches log() welche Ausgabe erzeugt.

            und zu deiner Frage:

            async erzwingt ein await wenn du eine Rückgabe haben möchtest.

            async function getACgesamt() {
            ...
            
            AC_Sum = getACgesamt(); // rückgabe Promise<any>
            
            // richtig
            
            AC_Sum = await getACgesamt();
            
            

            EDIT:
            Jedoch wäre es sinnvoller das async in async function getACgesamt() zu entfernen. Ist unnötig und nur eine zusätzliche Fehlerquelle.

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            E 1 Antwort Letzte Antwort
            0
            • T ticaki

              @etzeste13

              Bitte benutze log nicht console.log. Dann verwendet

              log(`Dat ist en Kontrollvalue: ${AC_ges}`);
              
              //Ich verwende fast nur `` strings
              

              Damit man im Log sieht welches log() welche Ausgabe erzeugt.

              und zu deiner Frage:

              async erzwingt ein await wenn du eine Rückgabe haben möchtest.

              async function getACgesamt() {
              ...
              
              AC_Sum = getACgesamt(); // rückgabe Promise<any>
              
              // richtig
              
              AC_Sum = await getACgesamt();
              
              

              EDIT:
              Jedoch wäre es sinnvoller das async in async function getACgesamt() zu entfernen. Ist unnötig und nur eine zusätzliche Fehlerquelle.

              E Offline
              E Offline
              etzeste13
              schrieb am zuletzt editiert von
              #7

              @ticaki
              Hallo und vielen Dank!! Funktioniert ohne dem async natürlich, und auch nur log funktioniert tadellos.

              Stellt sich mir nun die Frage, warum wählt den Bockly bei einer Funktion den Wert async und bei einer Ausgabe das console.log?

              Wie oben beschrieben, versuche ich viel zu lernen indem ich Blocklys mache und mir dann ansehe wie das in JS umgewandelt wird...
              lg Etze

              T 1 Antwort Letzte Antwort
              0
              • E etzeste13

                @ticaki
                Hallo und vielen Dank!! Funktioniert ohne dem async natürlich, und auch nur log funktioniert tadellos.

                Stellt sich mir nun die Frage, warum wählt den Bockly bei einer Funktion den Wert async und bei einer Ausgabe das console.log?

                Wie oben beschrieben, versuche ich viel zu lernen indem ich Blocklys mache und mir dann ansehe wie das in JS umgewandelt wird...
                lg Etze

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von ticaki
                #8

                @etzeste13

                Zu dem console.log weiß ich nichts zu sagen, das muß @haus-automatisierung beantworten. ´log` ist im JS auf jeden Fall die bevorzugte Methode.

                Das async ist kein Problem, da Blockly ja nicht das await vergisst :) Und in deinem schedule hast du ein await sleep() drin, dafür muß diese Funktion mit async gekennzeichnet sein.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                E 1 Antwort Letzte Antwort
                1
                • T ticaki

                  @etzeste13

                  Zu dem console.log weiß ich nichts zu sagen, das muß @haus-automatisierung beantworten. ´log` ist im JS auf jeden Fall die bevorzugte Methode.

                  Das async ist kein Problem, da Blockly ja nicht das await vergisst :) Und in deinem schedule hast du ein await sleep() drin, dafür muß diese Funktion mit async gekennzeichnet sein.

                  E Offline
                  E Offline
                  etzeste13
                  schrieb am zuletzt editiert von
                  #9

                  @ticaki
                  Ich verstehe und ich kann mit dem Feedback auch arbeiten.
                  Was ich noch probiert habe und bei mir von deinem Codvorschlag nicht funktioniert hat war

                  log(`Dat ist en Kontrollvalue: ${AC_ges}`);
                  

                  bei mir hat folgendes funktioniert:

                  log('Das ist Rückgabewert der Funktion:' + AC_ges);
                  

                  lg

                  T 1 Antwort Letzte Antwort
                  0
                  • E etzeste13

                    @ticaki
                    Ich verstehe und ich kann mit dem Feedback auch arbeiten.
                    Was ich noch probiert habe und bei mir von deinem Codvorschlag nicht funktioniert hat war

                    log(`Dat ist en Kontrollvalue: ${AC_ges}`);
                    

                    bei mir hat folgendes funktioniert:

                    log('Das ist Rückgabewert der Funktion:' + AC_ges);
                    

                    lg

                    T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von ticaki
                    #10

                    @etzeste13
                    Ich wette du hast den gleichen Fehler gemacht wie ich am anfang

                    folgendes ist nicht das gleiche:

                    "" // double quote
                    '' // single quote
                    `` // template literals
                    ´´ // das ist garnix
                    

                    ich hab oben:

                    ``
                    

                    verwerdet.

                    https://www.w3schools.com/js/js_string_templates.asp

                    mit template literals kannste halt sowas machen:

                    log(`${topic}: ${type} - ${typeof value == 'object' ? JSON.stringify(value) : value}`);
                    

                    die alternative sieht so aus:

                    log(topic + ': ' + type + ' - '  + typeof value == 'object' ? JSON.stringify(value) : value);
                    

                    Wenn das jetzt aufbläst wird es unlesbar

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    E 1 Antwort Letzte Antwort
                    1
                    • T ticaki

                      @etzeste13
                      Ich wette du hast den gleichen Fehler gemacht wie ich am anfang

                      folgendes ist nicht das gleiche:

                      "" // double quote
                      '' // single quote
                      `` // template literals
                      ´´ // das ist garnix
                      

                      ich hab oben:

                      ``
                      

                      verwerdet.

                      https://www.w3schools.com/js/js_string_templates.asp

                      mit template literals kannste halt sowas machen:

                      log(`${topic}: ${type} - ${typeof value == 'object' ? JSON.stringify(value) : value}`);
                      

                      die alternative sieht so aus:

                      log(topic + ': ' + type + ' - '  + typeof value == 'object' ? JSON.stringify(value) : value);
                      

                      Wenn das jetzt aufbläst wird es unlesbar

                      E Offline
                      E Offline
                      etzeste13
                      schrieb am zuletzt editiert von
                      #11

                      @ticaki
                      Das war´s!! Vielen Dank für die Hilfe!! So habe ich heute wirklich was gelernt!!

                      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

                      477

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      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