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. getState(obj.id).val vs obj.state.val

NEWS

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

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

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

getState(obj.id).val vs obj.state.val

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
16 Beiträge 4 Kommentatoren 1.6k Aufrufe 2 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.
  • paul53P paul53

    @hanss sagte:

    Wird in jedem Fall das Objekt neu gelesen?

    Nein, die Variable obj wurde bereits an die Callback-Funktion übergeben.

    hanssH Offline
    hanssH Offline
    hanss
    schrieb am zuletzt editiert von hanss
    #3

    @paul53 sagte in getState(obj.id).val vs obj.state.val:

    @hanss sagte:

    Wird in jedem Fall das Objekt neu gelesen?

    Nein, die Variable obj wurde bereits an die Callback-Funktion übergeben.

    Ich habe auch nicht obj gemeint, sondern ob der val in der Callback neu gelesen wird.
    Kannst Du etwas zu dem geschilderten Unterschied sagen?

    paul53P 1 Antwort Letzte Antwort
    0
    • hanssH hanss

      @paul53 sagte in getState(obj.id).val vs obj.state.val:

      @hanss sagte:

      Wird in jedem Fall das Objekt neu gelesen?

      Nein, die Variable obj wurde bereits an die Callback-Funktion übergeben.

      Ich habe auch nicht obj gemeint, sondern ob der val in der Callback neu gelesen wird.
      Kannst Du etwas zu dem geschilderten Unterschied sagen?

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

      @hanss sagte:

      ob der val in der Callback neu gelesen wird.

      obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

      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

      hanssH AlCalzoneA 2 Antworten Letzte Antwort
      0
      • paul53P paul53

        @hanss sagte:

        ob der val in der Callback neu gelesen wird.

        obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

        hanssH Offline
        hanssH Offline
        hanss
        schrieb am zuletzt editiert von
        #5

        @paul53 sagte in getState(obj.id).val vs obj.state.val:

        @hanss sagte:

        ob der val in der Callback neu gelesen wird.

        obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

        Hallo paul53,
        das ist genau die Info, die ich gesucht habe.
        Ich habe schon vermutet, dass es einen grundsätzlichen Unterschied gibt.
        Kennst Du eine Quelle, wo man solche Infos nachlesen kann?
        Vielen Dank für die Info.

        paul53P 1 Antwort Letzte Antwort
        0
        • hanssH hanss

          @paul53 sagte in getState(obj.id).val vs obj.state.val:

          @hanss sagte:

          ob der val in der Callback neu gelesen wird.

          obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

          Hallo paul53,
          das ist genau die Info, die ich gesucht habe.
          Ich habe schon vermutet, dass es einen grundsätzlichen Unterschied gibt.
          Kennst Du eine Quelle, wo man solche Infos nachlesen kann?
          Vielen Dank für die Info.

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

          @hanss sagte:

          Quelle, wo man solche Infos nachlesen kann?

          Funktionen des JS-Adapters

          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
          • paul53P paul53

            @hanss sagte:

            ob der val in der Callback neu gelesen wird.

            obj.state.val ist Bestandteil der Objekt-Variablen obj. Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

            AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #7

            @paul53 sagte in getState(obj.id).val vs obj.state.val:

            Es muss also im Gegensatz zu getState(id).val nichts neu eingelesen werden.

            Ganz wichtig: getState kann innerhalb von Triggern teilweise alte Werte liefern. obj.state.val ist immer der Wert, der den Trigger ausgelöst hat.

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

            1 Antwort Letzte Antwort
            0
            • hanssH Offline
              hanssH Offline
              hanss
              schrieb am zuletzt editiert von
              #8

              Hallo paul53,

              ich habe hier die Abfrage:

              $('state(functions=fensterkontakt)').on(function(obj) {
                   log("Immer, wenn ein fensterkontakt = true")
              }
              

              Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.
              Ich benötige aber nur einen Aufruf, wenn fensterkotakt sich geändert hat, d.h. "ne":,
              bringe aber das 'change: "ne"' nirgens unter.

              Hoffentlich kennst Du die Syntax, im Tutorial wurde ich nirgens fündig.

              paul53P 1 Antwort Letzte Antwort
              0
              • hanssH hanss

                Hallo paul53,

                ich habe hier die Abfrage:

                $('state(functions=fensterkontakt)').on(function(obj) {
                     log("Immer, wenn ein fensterkontakt = true")
                }
                

                Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.
                Ich benötige aber nur einen Aufruf, wenn fensterkotakt sich geändert hat, d.h. "ne":,
                bringe aber das 'change: "ne"' nirgens unter.

                Hoffentlich kennst Du die Syntax, im Tutorial wurde ich nirgens fündig.

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

                @hanss sagte:

                Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.

                Nein, getriggert wird bei Wertänderung. Will man true auswerten, muss man eine Abfrage einbauen:

                $('state(functions=fensterkontakt)').on(function(obj) {
                     if(obj.state.val) log("Immer, wenn ein fensterkontakt = true");
                     else log("Immer, wenn ein fensterkontakt = false");
                });
                

                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

                hanssH 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @hanss sagte:

                  Die on funktion wird immer aktiv, wenn ein fensterkontakt = true.

                  Nein, getriggert wird bei Wertänderung. Will man true auswerten, muss man eine Abfrage einbauen:

                  $('state(functions=fensterkontakt)').on(function(obj) {
                       if(obj.state.val) log("Immer, wenn ein fensterkontakt = true");
                       else log("Immer, wenn ein fensterkontakt = false");
                  });
                  
                  hanssH Offline
                  hanssH Offline
                  hanss
                  schrieb am zuletzt editiert von
                  #10

                  @paul53

                  Dann muß ich leider den ganzen Block einfügen:
                  Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                  in Zeile 11 nicht geändert hat (habe in dem Objekt die letzte Änderung kontrolliert)

                  Ist zwar eine Zumutung, die Bitte einen Fehler zu suchen, aber vielleicht hast Du einige Minuten
                  Zeit:

                  const idsFenster = $('state(functions=fensterkontakt)');    // alle Objekte mit Funktion Tür Fenster Kontakt
                  var AnzFensterOffen = 0;
                  
                  idsFenster.each(function(id, i) {                           // Bei Programmstart alle Kontakte einlesen
                        if (getState(id).val){
                           AnzFensterOffen++;       
                        }
                  });
                  setState("javascript.0.zigbee.0.Fensterkontakt", AnzFensterOffen)
                  
                  idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                      var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                                                                              // obj.state.val = Bestandteil der Objekt-Variablen obj
                      var raum = getObject(obj.id, "rooms");
                      var raumname = String(raum.enumNames);                          // Raumname(Aufzählungen) der Änderung
                      var obj_root_id = "javascript.0." + obj.id.substr(0, 25)      // Root Objekt = die ersten 25 Zeichen von "zigbee.0.00158d0003eefd9f.opened"
                      InsertObj(obj_root_id,raumname);                              // evtl. fehlende Alarm Obj. erzeugen
                      var alarm_id = obj_root_id+".AlarmStatus";                    // Objekt ID für Alarm      man. Eintrag
                      var alarmzeit_id = obj_root_id+".AlarmZeit";                  // Individuelle Alarm Zeit  man. Eintrag
                      var alarmzeit = getState(alarmzeit_id).val;
                      if (alarmzeit < 1) alarmzeit = DefaultAlarmZeit;
                      var radiator_id = "";                                         // Welcher Heizkörper ist betroffen
                      var timeout_1
                      var WZ_Temp_alt = TempHigh
                      // Suche Heizungs-Objekt
                      $('state[id=*](functions=solltemperatur)(rooms='+raumname+')').each(function(id) { // suche Radiator für diesen Raum
                              radiator_id = id;
                      });
                   // log ("Kontrolle: "+raumname+" - " + Kontakt+" - "+radiator_id) 
                   // log ("Alarm: "+alarm_id+" Alarmzeit: "+alarmzeit) 
                   
                          if (Kontakt) {                              // Fenster/Türe offen       
                              setState(alarm_id,1);                           // 1 = Fenster offen
                              AnzFensterOffen++;
                              timeout_1 = setTimeout(function (obj,alarm_id,radiator_id,raumname) {      
                                  if (getState(obj.id).val) {                 // Kontakt neu einlesen. Nach Alarmzeit immer noch offen?   
                                      if (raumname=="Wohnzimmer"){            // Sonderfall Wohnzimmer
                                             setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","false");       // Lüftung aus
                                             WZ_Temp_alt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                      } else {
                                           // kein Alarm im Sommer wenn Heizung aus
                                           if (parseFloat(getState("javascript.0.haus.Summenwerte.7_Tage.keller.Heizung.Gasverbrauch.proTag").val) > 5){
                                             const text = "Achtung !! Im "+raumname + " ist ein Fenster länger als "+ alarmzeit/60 + " Min. offen"
                                             loginfo(text);
                                             Email(text,'OG Fenster offen');
                                           }
                                      }
                                      setState(alarm_id,2);                   // 2 = Fenster Offen Alarm
                                      if(radiator_id != "") setState(radiator_id,TempLow);   // Wenn EvoHome TV: RT-Soll bei offenem Fenster 
                                  }                            
                              },alarmzeit * 1000,obj,alarm_id,radiator_id,raumname);  // Alarm nach OffenAlarmZeit Sek.
                          } else {
                              clearTimeout(timeout_1)                      // Alarm Timer löschen, wenn Fenster/Türe = zu
                              setState(alarm_id,0);                        // Fenster geschlossen
                              AnzFensterOffen--;
                              if (raumname=="Wohnzimmer"){         // Sonderfall Wohnzimmer
                                  setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","true");       // Lüftung ein
                                  var WZ_Temp_akt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                  var WZ_Zemp_man = parseFloat(getState(radiator_id).val);
                                  
                                  if (WZ_Temp_akt != TempLow) {
                                      if (WZ_Zemp_man == TempLow) setState(radiator_id,-WZ_Temp_akt);
                                  } else {
                                      setState(radiator_id,-TempHigh);
                                  }
                              }
                          } 
                          setState("javascript.0.zigbee.0.Fensterkontakt",AnzFensterOffen)
                  });  // state(functions=   
                  
                  
                  paul53P 1 Antwort Letzte Antwort
                  0
                  • hanssH hanss

                    @paul53

                    Dann muß ich leider den ganzen Block einfügen:
                    Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                    in Zeile 11 nicht geändert hat (habe in dem Objekt die letzte Änderung kontrolliert)

                    Ist zwar eine Zumutung, die Bitte einen Fehler zu suchen, aber vielleicht hast Du einige Minuten
                    Zeit:

                    const idsFenster = $('state(functions=fensterkontakt)');    // alle Objekte mit Funktion Tür Fenster Kontakt
                    var AnzFensterOffen = 0;
                    
                    idsFenster.each(function(id, i) {                           // Bei Programmstart alle Kontakte einlesen
                          if (getState(id).val){
                             AnzFensterOffen++;       
                          }
                    });
                    setState("javascript.0.zigbee.0.Fensterkontakt", AnzFensterOffen)
                    
                    idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                        var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                                                                                // obj.state.val = Bestandteil der Objekt-Variablen obj
                        var raum = getObject(obj.id, "rooms");
                        var raumname = String(raum.enumNames);                          // Raumname(Aufzählungen) der Änderung
                        var obj_root_id = "javascript.0." + obj.id.substr(0, 25)      // Root Objekt = die ersten 25 Zeichen von "zigbee.0.00158d0003eefd9f.opened"
                        InsertObj(obj_root_id,raumname);                              // evtl. fehlende Alarm Obj. erzeugen
                        var alarm_id = obj_root_id+".AlarmStatus";                    // Objekt ID für Alarm      man. Eintrag
                        var alarmzeit_id = obj_root_id+".AlarmZeit";                  // Individuelle Alarm Zeit  man. Eintrag
                        var alarmzeit = getState(alarmzeit_id).val;
                        if (alarmzeit < 1) alarmzeit = DefaultAlarmZeit;
                        var radiator_id = "";                                         // Welcher Heizkörper ist betroffen
                        var timeout_1
                        var WZ_Temp_alt = TempHigh
                        // Suche Heizungs-Objekt
                        $('state[id=*](functions=solltemperatur)(rooms='+raumname+')').each(function(id) { // suche Radiator für diesen Raum
                                radiator_id = id;
                        });
                     // log ("Kontrolle: "+raumname+" - " + Kontakt+" - "+radiator_id) 
                     // log ("Alarm: "+alarm_id+" Alarmzeit: "+alarmzeit) 
                     
                            if (Kontakt) {                              // Fenster/Türe offen       
                                setState(alarm_id,1);                           // 1 = Fenster offen
                                AnzFensterOffen++;
                                timeout_1 = setTimeout(function (obj,alarm_id,radiator_id,raumname) {      
                                    if (getState(obj.id).val) {                 // Kontakt neu einlesen. Nach Alarmzeit immer noch offen?   
                                        if (raumname=="Wohnzimmer"){            // Sonderfall Wohnzimmer
                                               setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","false");       // Lüftung aus
                                               WZ_Temp_alt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                        } else {
                                             // kein Alarm im Sommer wenn Heizung aus
                                             if (parseFloat(getState("javascript.0.haus.Summenwerte.7_Tage.keller.Heizung.Gasverbrauch.proTag").val) > 5){
                                               const text = "Achtung !! Im "+raumname + " ist ein Fenster länger als "+ alarmzeit/60 + " Min. offen"
                                               loginfo(text);
                                               Email(text,'OG Fenster offen');
                                             }
                                        }
                                        setState(alarm_id,2);                   // 2 = Fenster Offen Alarm
                                        if(radiator_id != "") setState(radiator_id,TempLow);   // Wenn EvoHome TV: RT-Soll bei offenem Fenster 
                                    }                            
                                },alarmzeit * 1000,obj,alarm_id,radiator_id,raumname);  // Alarm nach OffenAlarmZeit Sek.
                            } else {
                                clearTimeout(timeout_1)                      // Alarm Timer löschen, wenn Fenster/Türe = zu
                                setState(alarm_id,0);                        // Fenster geschlossen
                                AnzFensterOffen--;
                                if (raumname=="Wohnzimmer"){         // Sonderfall Wohnzimmer
                                    setState("mqtt.0.haus.keller.Helios_KWL.Lueftung.KWL_EinAus","true");       // Lüftung ein
                                    var WZ_Temp_akt = parseFloat(getState('javascript.0.haus.Heizung.Wohnzimmer.Soll').val);
                                    var WZ_Zemp_man = parseFloat(getState(radiator_id).val);
                                    
                                    if (WZ_Temp_akt != TempLow) {
                                        if (WZ_Zemp_man == TempLow) setState(radiator_id,-WZ_Temp_akt);
                                    } else {
                                        setState(radiator_id,-TempHigh);
                                    }
                                }
                            } 
                            setState("javascript.0.zigbee.0.Fensterkontakt",AnzFensterOffen)
                    });  // state(functions=   
                    
                    
                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von paul53
                    #11

                    @hanss sagte:

                    Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                    in Zeile 11 nicht geändert hat

                    Sicher ? Die Callback-Funktion wird nur bei einem Trigger ausgeführt. Checke es per Log:

                    idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                        var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                        log('Trigger ' + obj.id + ': ' + Kontakt);
                    

                    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

                    hanssH 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @hanss sagte:

                      Ich erhalte laufend die E-mail, die in Zeile 45 erzeugt wird, obwohl sich der fensterkontakt
                      in Zeile 11 nicht geändert hat

                      Sicher ? Die Callback-Funktion wird nur bei einem Trigger ausgeführt. Checke es per Log:

                      idsFenster.on(function(obj) {                               // alle Objekte mit Funktion Tür Fenster Kontakt
                          var Kontakt = obj.state.val;                            // Fensterkontakt true/false
                          log('Trigger ' + obj.id + ': ' + Kontakt);
                      
                      hanssH Offline
                      hanssH Offline
                      hanss
                      schrieb am zuletzt editiert von
                      #12

                      @paul53
                      Da war mal wieder Geisterstunde.
                      Seit dem Vorfall kann ich die wiederkehrenden E-mails nicht mehr reproduzieren.
                      Vielen Dank!

                      hanssH 1 Antwort Letzte Antwort
                      0
                      • hanssH hanss

                        @paul53
                        Da war mal wieder Geisterstunde.
                        Seit dem Vorfall kann ich die wiederkehrenden E-mails nicht mehr reproduzieren.
                        Vielen Dank!

                        hanssH Offline
                        hanssH Offline
                        hanss
                        schrieb am zuletzt editiert von
                        #13

                        @hanss
                        Hallo paul53:

                        Ich finde das einfach nicht:
                        Könntest Du mir bitte einen Link angeben, wo ich sehen kann, wie das
                        obj bei " idsBW1.on(function(obj) " aufgebaut ist?
                        Bis jetzt kenne ich nur obj.state.val und obj.id.

                        Wie kann ich mit log("Objekt: "+obj.liste) alle möglichen werte einsehen?
                        Vielen Dank!

                        1 Antwort Letzte Antwort
                        0
                        • T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von ticaki
                          #14

                          Meinst du

                          log(JSON.stringify(obj));
                          

                          ?

                          und hier ist es aufgelistet. https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          paul53P 1 Antwort Letzte Antwort
                          0
                          • hanssH Offline
                            hanssH Offline
                            hanss
                            schrieb am zuletzt editiert von
                            #15

                            @ticaki sagte in getState(obj.id).val vs obj.state.val:

                            log(JSON.stringify(obj));

                            Ja genau. Super.
                            Vielen Dank

                            1 Antwort Letzte Antwort
                            0
                            • T ticaki

                              Meinst du

                              log(JSON.stringify(obj));
                              

                              ?

                              und hier ist es aufgelistet. https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

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

                              @ticaki sagte:

                              log(JSON.stringify(obj));

                              In neueren Versionen des Javascript-Adapters ist JSON.stringify() nicht erforderlich.

                              on(id, function(dp) {
                                  log(dp); // zeigt id, state, oldState
                                  log(dp.common); // zeigt common-Attribute
                              });
                              

                              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
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              968

                              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