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. Script triggert nicht bei Temperaturänderung

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Script triggert nicht bei Temperaturänderung

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascript
6 Beiträge 2 Kommentatoren 356 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.
  • M Online
    M Online
    michihorn
    schrieb am zuletzt editiert von
    #1

    Hallöchen, ich habe ein Script erstellt, dass soll bei einer Temperatur von 25 Grad auslösen und eine Markisse hochfahren.
    Das Script soll auch bei Regen den Behang Runter fahren. Abend nach vor eingestellter Zeit soll der Behang ebenfalls Runter fahren.
    Grundsätzlich funktioniert das Script. Schließen klappt. Bei Temperatur hochfahren auch, aber nur wenn ich zuvor im Script-Editor das Script neu gestartet habe. Könnte sich jemand mal das Script bitte anschauen?. Danke

    /*****Steuerung Markisse Pool Kopf*******************************************
    **    April 2020
    **    TAHOMA
    **    0 = OBEN, 100 = UNTEN, Nr 0= OBEN, Nr 1 = UNTEN
    **    
    **    geä:
    ********************************************************************************/
    
    const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
    const idAnwesend = 'javascript.0.Anwesenheitssteuerung.Userlist.JemandDa';
    const idAuto = 'javascript.0.Garten.Zeitsteuerung.PoolK.AutoTemp'; // Automatik
    const idNr = 'javascript.0.Garten.Zeitsteuerung.PoolK.Nr'; // Wert zur Steuerung Widgets
    const idPosK = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
    const idRStunde = "javascript.0.Garten.Zeitsteuerung.PoolK.R_stunde";
    const idRMinute = "javascript.0.Garten.Zeitsteuerung.PoolK.R_minute";
    const idTemp = 'hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE'; // Temperatur Poolbereich
    const idSW_Temp = 'javascript.0.Garten.Zeitsteuerung.PoolK.SW_Temp'; // Auslösewert'; // Temperatur Poolbereich
    const idAutoR = "javascript.0.Garten.Zeitsteuerung.PoolK.AutoR";
    
    
    const idRegen = 'hm-rpc.0.OEQ0996444.1.STATE'; // Status Regen
    
    var Anwesend = getState(idAnwesend).val;
    var RolloStatus = getState(idRollo).val;
    var R_stunde = getState(idRStunde).val;
    var R_minute = getState(idRMinute).val;
    var AUTO = getState(idAutoR).val;
    var AutoTemp = getState(idAuto).val;
    var IstTemp = getState(idTemp).val;
    var Nr = getState(idNr).val;
    var SW_Temp = getState(idSW_Temp).val;
    var Regen = getState(idRegen).val;
    var schedAuf, schedRunter, text, Pos, Status;
    
    console.log(Regen);
    //Rollo POS/Nr festlegen (Nr.0 oder Nr.1)
    schedule("* * * * *", function () {
            if (getState(idRollo).val == 0) {
            setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
        } else {
            setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
        
        }
    });
    
    function StatusK() {
        Pos = getState(idRollo).val;
        if (Pos == 0) {
            Status = "OBEN"
            setState(idNr, 0);//EINGEFAHREN 
        } else {
            Status = "UNTEN"
            setState(idNr, 1);//AUSGEFAHREN
        };
        return Status;
    };
    schedule("* * * * *", function () {
        console.log("----STATUSINFO ZUR MARKISSE POOL KOPF----");
        console.log("-> Automatik ist: " + AutoTemp);
        console.log("-> Auto Schließen: " + AUTO);
        console.log("-> Auto Schließen um: " + R_stunde + ":" + R_minute);
        console.log("-> Jemand im Haus: " + Anwesend);
        console.log("-> Regnet es? " + Regen);
        console.log("-> Ist Temp: " + IstTemp + " °C");
        console.log("-> Stellwert Temp: " + SW_Temp + " °C");
        console.log("-> Markisse Pool Kopf: " + StatusK());
        console.log("-> Status für Widget: " + Nr);
        console.log("--------------------------------");
    });
    
    function Aktion(pos) {
        if (getState(idAuto).val == true) {
            setState(idRollo, pos);
            if (pos) console.log("*****Markisse PoolK fährt Runter***** ");
            else console.log("*****Markisse PoolK fährt Rauf***** ");
        }
    };
    
    //PoolK RUNTER
    schedule({ hour: R_stunde, minute: R_minute }, RunDailyDown);
    function RunDailyDown() {
        if (AUTO == true) {
            Aktion(100);
            setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
            text = '\u2b07\ufe0f  Pool Kopf ';
            createEventlog("RUNTER", text);
        }
    };
    
    //PoolK RegenRunter
    on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) {
        if (Regen == 1) {
            Aktion(100);
            setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
            text = '\u2b07\ufe0f  REGEN Pool Kopf ';
            createEventlog("RUNTER", text);
        }
    });
    
    on({ id: "hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE", change: "gt" }, function (obj) {
        var value = obj.state.val;
            var oldValue = obj.oldState.val;
        if (IstTemp >= SW_Temp) {
            Aktion(0);
            setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
            text = '\u2b06\ufe0f  Temp Markisse Pool Kopf ';
            createEventlog("AUF", text)
        }
    });
    

    Gruß Michael

    paul53P 2 Antworten Letzte Antwort
    0
    • M michihorn

      Hallöchen, ich habe ein Script erstellt, dass soll bei einer Temperatur von 25 Grad auslösen und eine Markisse hochfahren.
      Das Script soll auch bei Regen den Behang Runter fahren. Abend nach vor eingestellter Zeit soll der Behang ebenfalls Runter fahren.
      Grundsätzlich funktioniert das Script. Schließen klappt. Bei Temperatur hochfahren auch, aber nur wenn ich zuvor im Script-Editor das Script neu gestartet habe. Könnte sich jemand mal das Script bitte anschauen?. Danke

      /*****Steuerung Markisse Pool Kopf*******************************************
      **    April 2020
      **    TAHOMA
      **    0 = OBEN, 100 = UNTEN, Nr 0= OBEN, Nr 1 = UNTEN
      **    
      **    geä:
      ********************************************************************************/
      
      const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
      const idAnwesend = 'javascript.0.Anwesenheitssteuerung.Userlist.JemandDa';
      const idAuto = 'javascript.0.Garten.Zeitsteuerung.PoolK.AutoTemp'; // Automatik
      const idNr = 'javascript.0.Garten.Zeitsteuerung.PoolK.Nr'; // Wert zur Steuerung Widgets
      const idPosK = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
      const idRStunde = "javascript.0.Garten.Zeitsteuerung.PoolK.R_stunde";
      const idRMinute = "javascript.0.Garten.Zeitsteuerung.PoolK.R_minute";
      const idTemp = 'hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE'; // Temperatur Poolbereich
      const idSW_Temp = 'javascript.0.Garten.Zeitsteuerung.PoolK.SW_Temp'; // Auslösewert'; // Temperatur Poolbereich
      const idAutoR = "javascript.0.Garten.Zeitsteuerung.PoolK.AutoR";
      
      
      const idRegen = 'hm-rpc.0.OEQ0996444.1.STATE'; // Status Regen
      
      var Anwesend = getState(idAnwesend).val;
      var RolloStatus = getState(idRollo).val;
      var R_stunde = getState(idRStunde).val;
      var R_minute = getState(idRMinute).val;
      var AUTO = getState(idAutoR).val;
      var AutoTemp = getState(idAuto).val;
      var IstTemp = getState(idTemp).val;
      var Nr = getState(idNr).val;
      var SW_Temp = getState(idSW_Temp).val;
      var Regen = getState(idRegen).val;
      var schedAuf, schedRunter, text, Pos, Status;
      
      console.log(Regen);
      //Rollo POS/Nr festlegen (Nr.0 oder Nr.1)
      schedule("* * * * *", function () {
              if (getState(idRollo).val == 0) {
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
          } else {
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
          
          }
      });
      
      function StatusK() {
          Pos = getState(idRollo).val;
          if (Pos == 0) {
              Status = "OBEN"
              setState(idNr, 0);//EINGEFAHREN 
          } else {
              Status = "UNTEN"
              setState(idNr, 1);//AUSGEFAHREN
          };
          return Status;
      };
      schedule("* * * * *", function () {
          console.log("----STATUSINFO ZUR MARKISSE POOL KOPF----");
          console.log("-> Automatik ist: " + AutoTemp);
          console.log("-> Auto Schließen: " + AUTO);
          console.log("-> Auto Schließen um: " + R_stunde + ":" + R_minute);
          console.log("-> Jemand im Haus: " + Anwesend);
          console.log("-> Regnet es? " + Regen);
          console.log("-> Ist Temp: " + IstTemp + " °C");
          console.log("-> Stellwert Temp: " + SW_Temp + " °C");
          console.log("-> Markisse Pool Kopf: " + StatusK());
          console.log("-> Status für Widget: " + Nr);
          console.log("--------------------------------");
      });
      
      function Aktion(pos) {
          if (getState(idAuto).val == true) {
              setState(idRollo, pos);
              if (pos) console.log("*****Markisse PoolK fährt Runter***** ");
              else console.log("*****Markisse PoolK fährt Rauf***** ");
          }
      };
      
      //PoolK RUNTER
      schedule({ hour: R_stunde, minute: R_minute }, RunDailyDown);
      function RunDailyDown() {
          if (AUTO == true) {
              Aktion(100);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
              text = '\u2b07\ufe0f  Pool Kopf ';
              createEventlog("RUNTER", text);
          }
      };
      
      //PoolK RegenRunter
      on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) {
          if (Regen == 1) {
              Aktion(100);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
              text = '\u2b07\ufe0f  REGEN Pool Kopf ';
              createEventlog("RUNTER", text);
          }
      });
      
      on({ id: "hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE", change: "gt" }, function (obj) {
          var value = obj.state.val;
              var oldValue = obj.oldState.val;
          if (IstTemp >= SW_Temp) {
              Aktion(0);
              setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
              text = '\u2b06\ufe0f  Temp Markisse Pool Kopf ';
              createEventlog("AUF", text)
          }
      });
      

      Gruß Michael

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

      @michihorn
      IstTemp wird nur einmal bei Script-Start gesetzt. Ändere Zeile 100 und lasse Zeilen 101 bis 103 (+108) weg:

      on({ id: idTemp, valGe: SW_Temp, oldValLt: SW_Temp}, function () {
      

      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

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @michihorn
        IstTemp wird nur einmal bei Script-Start gesetzt. Ändere Zeile 100 und lasse Zeilen 101 bis 103 (+108) weg:

        on({ id: idTemp, valGe: SW_Temp, oldValLt: SW_Temp}, function () {
        
        M Online
        M Online
        michihorn
        schrieb am zuletzt editiert von michihorn
        #3

        @paul53 Vielen Dank hab das so geändert, mal morgen abwarten.
        Kannst du noch mal über den Teil "Regen" schauen, ob das noch zu optimieren wäre?

        EDIT: Hochfahren nach Temperatur hat schon mal heute geklappt. :+1:

        Danke
        Michael

        1 Antwort Letzte Antwort
        0
        • M michihorn

          Hallöchen, ich habe ein Script erstellt, dass soll bei einer Temperatur von 25 Grad auslösen und eine Markisse hochfahren.
          Das Script soll auch bei Regen den Behang Runter fahren. Abend nach vor eingestellter Zeit soll der Behang ebenfalls Runter fahren.
          Grundsätzlich funktioniert das Script. Schließen klappt. Bei Temperatur hochfahren auch, aber nur wenn ich zuvor im Script-Editor das Script neu gestartet habe. Könnte sich jemand mal das Script bitte anschauen?. Danke

          /*****Steuerung Markisse Pool Kopf*******************************************
          **    April 2020
          **    TAHOMA
          **    0 = OBEN, 100 = UNTEN, Nr 0= OBEN, Nr 1 = UNTEN
          **    
          **    geä:
          ********************************************************************************/
          
          const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
          const idAnwesend = 'javascript.0.Anwesenheitssteuerung.Userlist.JemandDa';
          const idAuto = 'javascript.0.Garten.Zeitsteuerung.PoolK.AutoTemp'; // Automatik
          const idNr = 'javascript.0.Garten.Zeitsteuerung.PoolK.Nr'; // Wert zur Steuerung Widgets
          const idPosK = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState';
          const idRStunde = "javascript.0.Garten.Zeitsteuerung.PoolK.R_stunde";
          const idRMinute = "javascript.0.Garten.Zeitsteuerung.PoolK.R_minute";
          const idTemp = 'hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE'; // Temperatur Poolbereich
          const idSW_Temp = 'javascript.0.Garten.Zeitsteuerung.PoolK.SW_Temp'; // Auslösewert'; // Temperatur Poolbereich
          const idAutoR = "javascript.0.Garten.Zeitsteuerung.PoolK.AutoR";
          
          
          const idRegen = 'hm-rpc.0.OEQ0996444.1.STATE'; // Status Regen
          
          var Anwesend = getState(idAnwesend).val;
          var RolloStatus = getState(idRollo).val;
          var R_stunde = getState(idRStunde).val;
          var R_minute = getState(idRMinute).val;
          var AUTO = getState(idAutoR).val;
          var AutoTemp = getState(idAuto).val;
          var IstTemp = getState(idTemp).val;
          var Nr = getState(idNr).val;
          var SW_Temp = getState(idSW_Temp).val;
          var Regen = getState(idRegen).val;
          var schedAuf, schedRunter, text, Pos, Status;
          
          console.log(Regen);
          //Rollo POS/Nr festlegen (Nr.0 oder Nr.1)
          schedule("* * * * *", function () {
                  if (getState(idRollo).val == 0) {
                  setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
              } else {
                  setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
              
              }
          });
          
          function StatusK() {
              Pos = getState(idRollo).val;
              if (Pos == 0) {
                  Status = "OBEN"
                  setState(idNr, 0);//EINGEFAHREN 
              } else {
                  Status = "UNTEN"
                  setState(idNr, 1);//AUSGEFAHREN
              };
              return Status;
          };
          schedule("* * * * *", function () {
              console.log("----STATUSINFO ZUR MARKISSE POOL KOPF----");
              console.log("-> Automatik ist: " + AutoTemp);
              console.log("-> Auto Schließen: " + AUTO);
              console.log("-> Auto Schließen um: " + R_stunde + ":" + R_minute);
              console.log("-> Jemand im Haus: " + Anwesend);
              console.log("-> Regnet es? " + Regen);
              console.log("-> Ist Temp: " + IstTemp + " °C");
              console.log("-> Stellwert Temp: " + SW_Temp + " °C");
              console.log("-> Markisse Pool Kopf: " + StatusK());
              console.log("-> Status für Widget: " + Nr);
              console.log("--------------------------------");
          });
          
          function Aktion(pos) {
              if (getState(idAuto).val == true) {
                  setState(idRollo, pos);
                  if (pos) console.log("*****Markisse PoolK fährt Runter***** ");
                  else console.log("*****Markisse PoolK fährt Rauf***** ");
              }
          };
          
          //PoolK RUNTER
          schedule({ hour: R_stunde, minute: R_minute }, RunDailyDown);
          function RunDailyDown() {
              if (AUTO == true) {
                  Aktion(100);
                  setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
                  text = '\u2b07\ufe0f  Pool Kopf ';
                  createEventlog("RUNTER", text);
              }
          };
          
          //PoolK RegenRunter
          on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) {
              if (Regen == 1) {
                  Aktion(100);
                  setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 1);
                  text = '\u2b07\ufe0f  REGEN Pool Kopf ';
                  createEventlog("RUNTER", text);
              }
          });
          
          on({ id: "hm-rpc.2.0010D8A98AD479.1.ACTUAL_TEMPERATURE", change: "gt" }, function (obj) {
              var value = obj.state.val;
                  var oldValue = obj.oldState.val;
              if (IstTemp >= SW_Temp) {
                  Aktion(0);
                  setState('javascript.0.Garten.Zeitsteuerung.PoolK.Nr', 0);
                  text = '\u2b06\ufe0f  Temp Markisse Pool Kopf ';
                  createEventlog("AUF", text)
              }
          });
          

          Gruß Michael

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

          @michihorn sagte:

          on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) { if (Regen == 1) {

          Weshalb Trigger auf change: "any" ?
          Die Variable Regen wird nur bei Script-Start gesetzt.

          on(idRegen, function(dp) {
             Regen = dp.state.val;
             if(Regen) {
          

          Auch die Variable AUTO wird nur bei Script-Start gesetzt. Es fehlt ein Trigger, der sie aktualisiert.

          Du verwendest 2 identische Schedules (jede Minute). Fasse die minütlichen Aktionen in einem Schedule zusammen.

          Wo ist die Funktion createEventlog() deklariert ?

          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

          M 2 Antworten Letzte Antwort
          0
          • paul53P paul53

            @michihorn sagte:

            on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) { if (Regen == 1) {

            Weshalb Trigger auf change: "any" ?
            Die Variable Regen wird nur bei Script-Start gesetzt.

            on(idRegen, function(dp) {
               Regen = dp.state.val;
               if(Regen) {
            

            Auch die Variable AUTO wird nur bei Script-Start gesetzt. Es fehlt ein Trigger, der sie aktualisiert.

            Du verwendest 2 identische Schedules (jede Minute). Fasse die minütlichen Aktionen in einem Schedule zusammen.

            Wo ist die Funktion createEventlog() deklariert ?

            M Online
            M Online
            michihorn
            schrieb am zuletzt editiert von
            #5

            @paul53 Hallo Paul
            folgendes Script ist in "GLOBAL" deklariert

            createState("javascript.0.SystemEventList");
            createState("javascript.0.SystemEventList.EventList");
            createState("javascript.0.SystemEventList.NextEventid");
            const EventListDestination = "javascript.0.SystemEventList.";
             
            function createEventlog(EventType, EventText) {
              let EventList = getState(EventListDestination + "EventList").val;
              let EventId = getState(EventListDestination + "NextEventId").val;
              let EventDateTime = formatDate(getDateObject((new Date().getTime())), "TT.MM.JJ - hh:mm:ss");
             
              EventId = EventId + 1;
              setState(EventListDestination + "NextEventId", EventId);
               
              let FormatedEventId = ("00000" + EventId).slice(-5);
               
              let EventLog = FormatedEventId + " -- " + EventDateTime + " --- " + EventType + " - " + EventText;
              EventList = EventLog + "<br>" + EventList;
               
              setState(EventListDestination + "EventList", EventList);
            };
            

            Michael

            1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @michihorn sagte:

              on({ id: "hm-rpc1.OEQ0996444.1.STATE", change: "any" }, function (obj) { if (Regen == 1) {

              Weshalb Trigger auf change: "any" ?
              Die Variable Regen wird nur bei Script-Start gesetzt.

              on(idRegen, function(dp) {
                 Regen = dp.state.val;
                 if(Regen) {
              

              Auch die Variable AUTO wird nur bei Script-Start gesetzt. Es fehlt ein Trigger, der sie aktualisiert.

              Du verwendest 2 identische Schedules (jede Minute). Fasse die minütlichen Aktionen in einem Schedule zusammen.

              Wo ist die Funktion createEventlog() deklariert ?

              M Online
              M Online
              michihorn
              schrieb am zuletzt editiert von michihorn
              #6

              @paul53 Das Ereignis Regen sollte dynamisch sein, daher das "any".
              Bei jeder Zustandsänderung des Sensor DP sollte getriggert werden und dann festgestellt werden ob 1 oder 0.

              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

              589

              Online

              32.7k

              Benutzer

              82.4k

              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