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. [gelöst] JavaScript: gesetzte setStateDelayed abfragen

NEWS

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

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

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

[gelöst] JavaScript: gesetzte setStateDelayed abfragen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
23 Beiträge 8 Kommentatoren 4.6k Aufrufe
  • Ä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.
  • R Offline
    R Offline
    radioman
    schrieb am zuletzt editiert von
    #1

    Hallo Experten,

    kann ich irgendwie abfragen, ob für ein State ein setStateDelayed gesetzt ist? z.B.

    setStateDelayed("javascript.0.Licht.Flur_1", false, 5 * 60000, false);
    

    Wenn ja, kann ich auch noch die Anzahl der gesetzten setStateDelayed abfragen?

    Oder den Zeitpunkt und Inhalt des Nächsten?

    VG radioman

    1 Antwort Letzte Antwort
    0
    • M Offline
      M Offline
      Marty56
      schrieb am zuletzt editiert von
      #2

      Ist es wirklich möglich mehrer SetDelayed zu setzen.

      Ich denke man kann immer nur einen Wert setzen oder?

      Wie man das abfragt würde mich auch interessieren.

      HW:NUC (16 GB Ram)
      OS: Debian Bullseye, Promox V7, node v16.x npm 8.19.3

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        dwm
        schrieb am zuletzt editiert von
        #3

        Doch, es ist schon möglich, mehrere setStateDelayed (auch für das selbe Objekt) abzusetzen, das geht mit dem "clearRunning" Parameter.

        https://github.com/ioBroker/ioBroker.ja … atedelayed

        Die setStateDelayed Funktion gibt dann auch eine Referenz auf den Timer zurück, das ist dann evt. der Input für clearStateDelayed, falls man die Operation abbrechen will.

        setStateDelayed ist eine Implementation im javascript Adapter. Ich hab da grad reingeschaut, da ist intern ein "timers" array, das die Timer-Objekte managed.

        Kommt man aber denk ich nicht ran ... also keine unmittelbare Lösung. Evt. könnte Bluefox sowas einbauen ...

        1 Antwort Letzte Antwort
        0
        • R Offline
          R Offline
          radioman
          schrieb am zuletzt editiert von
          #4

          Danke für Eure Antworten.

          @Marty56

          Ja, das geht wunderbar.

          Ich steuere so z.B. meine drei "Wecker" (drei Dimmer für 1x Eltern & 2x Kinder) jeden früh in 99 Schritten von Level 1% bis 100% (Stichwort: "Lichtwecker"):

          function Light_DimmUp(Dimmer, LightDimmStart, DimmUp_duration, iStart, iMax, iIncrement, TimeOffset) {
              var firstloop = true;
              for (i = iStart; i <= iMax; i += iIncrement) {
                  setStateDelayed(Dimmer+".SET_LEVEL_1", LightDimmStart * i, (DimmUp_duration * 60 / 100) * 1000 * i, false)/*Helligkeit zeitverzögert erhöhen*/;
                  if (firstloop === true) {
                      setStateDelayed(Dimmer+".SWITCH_1", true, (DimmUp_duration * 60 / 100 + 1) * 1000 * i, false)/*Licht einschalten, um es später wieder ausschalten zu können*/;
                      firstloop = false;
                  }
              }
              setStateDelayed(Dimmer+".SWITCH_1", false, (DimmUp_duration + TimeOffset) * 60 *1000, false)/*Licht wieder ausschalten (TimeOffset) falls nach dem Aufstehen das Ausschalten vergessen wurde*/;
          }
          

          @dwm

          Das ist schade, wenn man es wirklich nicht ohne Umstände abfragen kann - würde mir den Code übersichtlicher und sicherer machen.

          Aber eventuell bekomme ich es ja dank Deines Hinweises auf die Doku

          var timer = setStateDelayed('Kitchen.Light.Lamp', true,  5000, false); // Switch ON the light in the kitchen in five second
          clearStateDelayed('Kitchen.Light.Lamp', timer); // Nothing will be switched on
          

          mit dem Setzen einer Variable hin. Leider muss ich dafür scheinbar jedesmal eine Variable definieren (oder gar einen State "spendieren"). In meinem Beispiel der 3x 99 setStateDelayed für Dimmerwerte will ich das Konzept gar nicht zu Ende denken. ;-)

          Da müsste man ja - um auch innerhalb der ablaufenden setStateDelayeds zu wissen, was los ist - 3x 99 Variablen oder States anlegen und abfragen. Auch mit Hilfe eines Arrays nicht wirklich komfortabel handlebar.

          Obendrein, dass ich meine ganzen Funktionen in unterschiedlichen Scripten unterhalb von "common" separiert angelegt habe. Da müsste ich sogar sogar globale Variablen anlegen, um von verschiedenen Scripten darauf (schlussendlich: auf die gleiche Lampe) zuzugreifen zu können.

          Am Ende bleibt ja auch immer die Gefahr mit solchen mittelbaren Parametern, dass sie mal nicht mit den unmittelbaren Zuständen übereinstimmen. Hier kann das ja möglicherweise ganz schnell passieren, wenn man nach

          var timer = setStateDelayed('Kitchen.Light.Lamp', true,  5000, false);
          

          ein

          clearStateDelayed('Kitchen.Light.Lamp');
          

          senden würde. Dann wären die setStateDelayed zwar gelöscht, aber die Variable "timer" hat eventuell noch den Wert "true".

          Ich werde mir das die Tage mal ansehen.

          Oder vielleicht hat ja doch noch jemand einen (er-)lösenden Tipp. :-)

          VG

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            radioman
            schrieb am zuletzt editiert von
            #5

            So habe es gerade getestet.

            Mein Fazit: es ist für eine Abfrage, ob ein setStateDelayed gesetzt ist scheinbar nicht nutzbar.

            Mein Testscript sieht so aus

            var test;
                log("1: "+ typeof test);
                log("1: "+ test);
            test = setStateDelayed("rflink.0.channels.NewKaku_15.SWITCH_1", true,  5000, false);
                log("2: "+ typeof test);
                log("2: "+ test);
            clearStateDelayed("rflink.0.channels.NewKaku_15.SWITCH_1", test);
                log("3: "+ typeof test);
                log("3: "+ test);
            

            Das ergibt im Log dann

            • 22:19:23.765 [info] javascript.0 Start javascript script.js.common.test
            22:19:23.765 [info] javascript.0 script.js.common.test: 1: undefined
            
            22:19:23.765 [info] javascript.0 script.js.common.test: 1: undefined
            
            22:19:23.765 [info] javascript.0 script.js.common.test: 2: number
            
            22:19:23.765 [info] javascript.0 script.js.common.test: 2: 14
            
            22:19:23.766 [info] javascript.0 script.js.common.test: 3: number
            
            22:19:23.766 [info] javascript.0 script.js.common.test: 3: 14
            
            22:19:23.766 [info] javascript.0 script.js.common.test: registered 0 subscriptions and 0 schedules 
            

            Wobei die 14 bei jedem Starten und Speichern des Scriptes weiterzählt. Da es vom Typ "number" ist, scheint es nur die ID des entsprechenden setStateDelayed im internen "timers" arrays zu sein, denn am Anfang hatte ich dort eine Zahl im 900er Bereich zu stehen. Als ich aber mein globales Script welches ich nur zur Definition von ca. 50 Variablen nutze, neu speicherte war das scheinbar zuviel der Änderung und es hat scheinbar das "timers" array zurückgesetzt.

            Mal sehen, vielleicht sagt ja wirklich Bluefox noch was hierzu.

            1 Antwort Letzte Antwort
            0
            • BluefoxB Offline
              BluefoxB Offline
              Bluefox
              schrieb am zuletzt editiert von
              #6

              Die Idee war, dass wen man die Timers managen will, dann muss man die auch speichern und dann benutzen.

              Aber wenn man das sogar macht, Javascirpt selbst gibt keine Möglichkeit abzufragen ob ein Timer läuft oder nicht.

              Da muss man was basteln

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                radioman
                schrieb am zuletzt editiert von
                #7

                Hallo Bluefox, danke für Deine Antwort.

                Da werde ich mir nun was ausdenken.

                Wie beschrieben, wäre es in meinen Augen aber für die Zukunft sinnvoll, so eine Abfragemöglichkeit mal einzubauen. Zumindest eine danach, ob derzeit (mindestens) ein Timer läuft.

                VG Radioman

                1 Antwort Letzte Antwort
                0
                • D Offline
                  D Offline
                  dwm
                  schrieb am zuletzt editiert von
                  #8

                  Hm, ich hab da grad mit den Timer Objekten rumgespielt …

                  var test1 = setTimeout(function(){ dwmlog("Hallo",4)},2000);
                  // clearTimeout(test1);
                  dwmlog ("Vorher: "+test1._called+ " timeout: "+test1._idleTimeout,4);
                  
                  setTimeout(function(){ 
                      dwmlog ("Nachher: "+JSON.stringify(test1),4);
                  },3000);
                  

                  ergibt:

                  12:33:34.537	[info]	javascript.0 Start javascript script.js.aa.testzeugs
                  12:33:34.537	[info]	javascript.0 script.js.aa.testzeugs: Vorher: false timeout: 2000
                  12:33:34.537	[info]	javascript.0 script.js.aa.testzeugs: registered 0 subscriptions and 0 schedules
                  12:33:36.536	[info]	javascript.0 script.js.aa.testzeugs: Hallo
                  12:33:37.538	[info]	javascript.0 script.js.aa.testzeugs: Nachher: {"_called":true,"_idleTimeout":2000,"_idlePrev":null,"_idleNext":null,"_idleStart":2498685963,"_timerArgs":[null,null,null,null],"_repeat":null}
                  

                  Bei einem clearTimeout geht das "_idleTimeout" auf -1…

                  Aus der Kombination von _called und _idleTimeout kriegt man also im Prinzip raus, ob der Timer noch läuft...

                  Nebenbei:

                  Wenn ich nach setTimeout gleich ein JSON.stringify auf dem Timerobjekt mache, kommt ein Error zurück, auf die Datenfelder kann man aber zugreifen ... no comprendre ...

                  CU

                  Werner

                  1 Antwort Letzte Antwort
                  0
                  • AlCalzoneA Offline
                    AlCalzoneA Offline
                    AlCalzone
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    Für solche Einmal-Timer habe ich bisher immer folgendes gemacht:

                    • Timer-Instanz in Variable gespeichert

                    • Ist Variable != null, dann läuft der Timer, sonst noch nicht oder nicht mehr.

                    • Im Timer-Callback als ersten Schritt die Timer-Variable auf null setzen.

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

                    1 Antwort Letzte Antwort
                    0
                    • BluefoxB Offline
                      BluefoxB Offline
                      Bluefox
                      schrieb am zuletzt editiert von
                      #10

                      https://github.com/ioBroker/ioBroker.ja … atedelayed

                      1 Antwort Letzte Antwort
                      0
                      • AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        @Bluefox:

                        https://github.com/ioBroker/ioBroker.ja … atedelayed `
                        Coole Sache! Ist die Timer-ID der Wert, den man an clearStateDelayed übergeben muss?

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

                        1 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #12

                          @AlCalzone:

                          @Bluefox:

                          https://github.com/ioBroker/ioBroker.ja … atedelayed Coole Sache! Ist die Timer-ID der Wert, den man an clearStateDelayed übergeben muss?
                          Ja. Mit TimerID man kann einen Timer löschen.

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            pix
                            schrieb am zuletzt editiert von
                            #13

                            getStateDelayed

                            Super! [emoji1360]

                            Pix

                            ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                            1 Antwort Letzte Antwort
                            0
                            • R Offline
                              R Offline
                              radioman
                              schrieb am zuletzt editiert von
                              #14

                              Hallo Bluefox,

                              Wow - ich bin platt. Sehr cool.

                              Ich bin schon ganz gespannt, wenn ich die Version dann ausprobieren kann. Bei mir wird ja noch die Version 1.4.0 als aktuellste Version angezeigt.

                              Jetzt stehe ich (als Anfänger) aber vor zwei neuen Problemen (was bei der schnellen Reaktion natürlich ein Luxusproblem ist ;)) .

                              • 1. Könntest Du in der Ausgabe eventuell auch noch den Wert ausgeben? Z.B. so:
                              ````
                              {timerId: 1, left: 1123, delay: 5000, value: true},
                              ````
                              Ich will ja oft prüfen, ob bald ein true oder false gesetzt werden wird.
                              
                              Ich schätze, dass das in der internen TimerListe enthalten ist und Du die ja eh für den output aufbereitest.
                              
                              Wenn das zu viele Outputparameter werden sollten: ich habe derzeit keine Idee zur Verwendung des initialen Delays.
                              
                              2\. Ich weiß jetzt noch nicht, wie man mit dem recht komplexen Output umgeht. Es sieht für mich danach aus, dass man dann ein Array zurückbekommt, welches man mit split o.ä. zerlegen muss, oder?
                              
                              Gut wäre noch, wenn man die Timer ID auch gleich direkt mit angeben könnte (in 99% der Fälle wird man ja den zeitlich nächsten wissen wollen) und dann auch gleich auf value oder left zugreifen könnte.
                              
                              Ich würde es günstig finden, wenn man so oder ähnlich auf z.B. den nächsten Timer zugreifen könnte:
                              ````
                              if (getStateDelayed('hm-rpc.0.LQE91119.1.STATE', timerId: 1, answer: value).val === true) { ...
                              ````
                              oder so:
                              ````
                              if (getStateDelayed('hm-rpc.0.LQE91119.1.STATE', timerId: 1, answer: left).val + new Date().getTime()) < getDateObject("20:00") { ...
                              ````
                              Oder geht das schon und ich checke das in der Doku nur noch nicht ganz? 
                              

                              radioman

                              1 Antwort Letzte Antwort
                              0
                              • DutchmanD Online
                                DutchmanD Online
                                Dutchman
                                Developer Most Active Administrators
                                schrieb am zuletzt editiert von
                                #15

                                @radioman:

                                Hallo Bluefox,

                                Wow - ich bin platt. Sehr cool.

                                Ich bin schon ganz gespannt, wenn ich die Version dann ausprobieren kann. Bei mir wird ja noch die Version 1.4.0 als aktuellste Version angezeigt. `

                                Version im Reiter ist immer nur die Version welche auf npm zur Verfügung steht.

                                Du kannst aber auch direct von git installieren!

                                In Reiter Adapter oben links (Symbol) von git installieren, url Kopieren und los gehts

                                –-----------------------

                                Send from mobile device

                                1 Antwort Letzte Antwort
                                0
                                • D Offline
                                  D Offline
                                  dwm
                                  schrieb am zuletzt editiert von
                                  #16

                                  Supercool, bluefox, vielen Dank … da muss ich mal bisschen rumspielen ...

                                  1 Antwort Letzte Antwort
                                  0
                                  • R Offline
                                    R Offline
                                    radioman
                                    schrieb am zuletzt editiert von
                                    #17

                                    @Dutchman

                                    Vielen Dank für den Tipp - hat super geklappt. Jetzt wird mir auch die Version 3.5.0 als installiert angezeigt.

                                    @dwm

                                    Läuft es denn bei Dir? Habe auch gleich rumprobiert, bekomme es aber irgendwie nicht hin:

                                    clearStateDelayed ("rflink.0.channels.NewKaku_11.SWITCH_1");
                                    var test = setStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1", false, 10000, false);
                                    log(test);
                                    //var answer = getStateDelayed(test);
                                    var answer = getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1");
                                    log(answer);
                                    

                                    führt bei mir (auch in dem auskommentierten Fall) zu:
                                    ` > 20:34:28.006 [info] javascript.0 Stop script script.js.common.test2

                                    20:34:28.263 [info] javascript.0 Start javascript script.js.common.test2

                                    20:34:28.264 [info] javascript.0 script.js.common.test2: 154

                                    20:34:28.264 [error] javascript.0 script.js.common.test2: script.js.common.test2:87

                                    20:34:28.265 [error] javascript.0 at script.js.common.test2:4:14 `
                                    :?

                                    1 Antwort Letzte Antwort
                                    0
                                    • D Offline
                                      D Offline
                                      dwm
                                      schrieb am zuletzt editiert von
                                      #18

                                      Servus,

                                      … es geht schon soweit.

                                      Ich hatte ein Problem, dass bei meinen ersten Versuchen getStateDelayed (Id) ein leeres Array zurück geliefert hat.

                                      getStateDelayed() klappte auf Anhieb.

                                      Ich hab dann an meinem Testprogramm "rumgeschraubt" ...

                                      ! var AdapterId = "javascript."+instance+"."; ! var TestId = AdapterId+"Testzeugs.NumberState"; ! createState( TestId, // name 0, // initial value false, // kein "Force-Create" { type: 'number', name: "Spasszustand zum Rumprobieren" } ); ! var test1 = setStateDelayed (TestId,5,2000); ! log ("All Delayed States: "+JSON.stringify(getStateDelayed())); log ("Delayed Test State: "+test1+" results in: "+JSON.stringify(getStateDelayed(TestId))); ! setTimeout(function(){ log ("All Delayed States: "+JSON.stringify(getStateDelayed())); log ("Delayed Test State: "+test1+" results in: "+JSON.stringify(getStateDelayed(TestId))); },150); !

                                      und … jetzt tuts wie's soll.

                                      ` > 10:23:58.402 [info] javascript.0 Start javascript script.js.aa.testzeugs

                                      10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: All Delayed States: {"javascript.0.Testzeugs.NumberState":[{"timerId":6,"left":2000,"delay":2000}]}

                                      10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: Delayed Test State: 6 results in: [{"timerId":6,"left":2000,"delay":2000}]

                                      10:23:58.402 [info] javascript.0 script.js.aa.testzeugs: registered 0 subscriptions and 0 schedules

                                      10:23:58.553 [info] javascript.0 script.js.aa.testzeugs: All Delayed States: {"javascript.0.Testzeugs.NumberState":[{"timerId":6,"left":1849,"delay":2000}]}

                                      10:23:58.553 [info] javascript.0 script.js.aa.testzeugs: Delayed Test State: 6 results in: [{"timerId":6,"left":1849,"delay":2000}] `

                                      Den Zustand, dass es NICHTS zurückliefert, kann ich nicht mehr reproduzieren…

                                      Fazit, klappt, aber irgendwie bisschen ... fishy ...

                                      Trotzdem, coole Sache.

                                      Werner

                                      1 Antwort Letzte Antwort
                                      0
                                      • R Offline
                                        R Offline
                                        radioman
                                        schrieb am zuletzt editiert von
                                        #19

                                        Hallo Werner,

                                        hab es jetzt auch hinbekommen.

                                        Nachdem auch Dein Code bei mir nicht ging, habe ich ioBroker mal neu gestartet - siehe da: danach ging es.

                                        Ich habe nun (dank Deines Hinweises auf JSON.stringify) auch eine Auswerteschleife programmiert bekommen, die mir sagt, wenn kein setStateDelayed gesetzt ist und wenn eines gesetzt ist, ob es vor oder nach einer bestimmten Uhrzeit des aktuellen Tages abläuft:

                                        ! ````
                                        //clearStateDelayed ("rflink.0.channels.NewKaku_11.SWITCH_1");
                                        //setStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1", false, 10000, false);
                                        if (JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1"))=="[]") {
                                        log("Es ist kein Delay gesetzt!");}
                                        else{
                                        if (parseInt(JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1")).split(",")[1].split(":")[1]) + parseInt(new Date().getTime()) < getDateObject("23:00").getTime()) {
                                        log("Delay ist vor gesetzter Zeit zu Ende!");}
                                        else{
                                        log("Delay ist nach gesetzter Zeit zu Ende!");}}

                                        
                                        Somit ist für mich meine ursprüngliche Frage "gesetzte setStateDelayed abfragen" gelöst. :D :D :D
                                        
                                        Ich kann mit
                                        ```
                                        `if (JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1"))=="[]") {...[/code]`
                                        abfragen, ob ein Delay gesetzt ist, und über
                                        `~~[code]~~parseInt(JSON.stringify(getStateDelayed("rflink.0.channels.NewKaku_11.SWITCH_1")).split(",")[1].split(":")[1])[/code]`
                                        bekomme ich sogar noch die verbleibende Restzeit heraus.
                                        
                                        Danke Bluefox!
                                        
                                        Falls Du doch noch einmal einen Moment Zeit hierfür übrig hast, und zumindest die ersten meiner beiden Anregungen (das "value") einbauen kannst, wäre das die Krönung. 
                                        
                                        VG radioman
                                        ```
                                        1 Antwort Letzte Antwort
                                        0
                                        • BluefoxB Offline
                                          BluefoxB Offline
                                          Bluefox
                                          schrieb am zuletzt editiert von
                                          #20

                                          Man bekommt jetzt Val und ack mit. Sehe Doku.

                                          Und es gibt die Möglichkeit über TimerID den Zustand abfragen.

                                          Liegt auf dem git

                                          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

                                          813

                                          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