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. Blockly
  5. Script mit "externer" Datenquelle?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.5k

Script mit "externer" Datenquelle?

Geplant Angeheftet Gesperrt Verschoben Blockly
9 Beiträge 3 Kommentatoren 531 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.
  • G Offline
    G Offline
    gfacek
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich nutze iobroker nun knapp 2 Jahre und möchte jetzt etwas tiefer in die "Programmierung" einsteigen. Bisher nutze ich nur kleinere Blockly-Scripte, wie "wenn der Aktor betätigt wird, schalte dieses Licht ein", oder "schalte die Heizung aus, wenn das Fenster geöffnet wird", usw.

    Jetzt kam mir die Idee, den CD-Spieler meiner Kinder gegen eine RFID-Jukebox zu ersetzen, wobei die Jukebox ein Amazon Echo ist und der RFID-Reader ein ESP8266 mit entsprechenden Modulen.

    Ich habe nun erreicht, dass beim Auflegen einer RFID-Karte ein MQTT-Datenpunkt mit der entsprechenden ID der Karte beschrieben wird. Auch habe ich ein Blockly, welches anhand dieser ID an Alexa den Befehl zum Abspielen einer Playlist schickt. Bei einigen wenigen Karten ist das so ja noch übersichtlich, aber sobald es in Richtung 20-30-50 Karten geht, wird das unübersichtlich zu pflegen.

    Aktuell sieht das Script mit nur zwei Karten-IDs so aus:
    a6ee8875-1a0a-4995-a94c-8d2051c5c572-image.png

    Jetzt kam mir der Gedanke, eine "externe" Datenquelle anzubinden. In dieser Datenquelle sind anhand der Karten-ID die Quelle (z.b. Spotify oder Amazon Music) und der zugehörige Alexa-Befehl hinterlegt (z.B. "Spiele Playlist Leo Lausemaus Folge 1"). Legt mein Sohn die Karte mit der ID 6970fbb2 auf, soll sich das Script aus der Datenquelle die Quelle und den Befehl für Alexa raussuchen und in die Variablen schreiben, welche dann im Script weiterverwendet werden.

    Wie erreiche ich das und mit welcher Datenquelle?
    In Powershell würde ich jetzt als Datenquelle vermutlich eine XML schreiben und diese dann zur Laufzeit einlesen. Hier bin ich allerdings überfragt.
    Auf meine Synology hätte ich eine MariaDB (MySQL), aber ich habe nichts gefunden, wie man sowas lösen könnte.
    Dann ist mir noch der Gedanke gekommen, dass ich ja die ganzen Karten als Datenpunkte unter userdata pflegen könnte, aber auch hier habe ich nichts gefunden, wie man einen ganzen Ordner einlesen kann und vor allem auch als zweidimensionalen Array speichern kann.

    Jemand eine Idee?

    Viele Grüße
    Tobias

    paul53P F 2 Antworten Letzte Antwort
    0
    • G gfacek

      Hallo,

      ich nutze iobroker nun knapp 2 Jahre und möchte jetzt etwas tiefer in die "Programmierung" einsteigen. Bisher nutze ich nur kleinere Blockly-Scripte, wie "wenn der Aktor betätigt wird, schalte dieses Licht ein", oder "schalte die Heizung aus, wenn das Fenster geöffnet wird", usw.

      Jetzt kam mir die Idee, den CD-Spieler meiner Kinder gegen eine RFID-Jukebox zu ersetzen, wobei die Jukebox ein Amazon Echo ist und der RFID-Reader ein ESP8266 mit entsprechenden Modulen.

      Ich habe nun erreicht, dass beim Auflegen einer RFID-Karte ein MQTT-Datenpunkt mit der entsprechenden ID der Karte beschrieben wird. Auch habe ich ein Blockly, welches anhand dieser ID an Alexa den Befehl zum Abspielen einer Playlist schickt. Bei einigen wenigen Karten ist das so ja noch übersichtlich, aber sobald es in Richtung 20-30-50 Karten geht, wird das unübersichtlich zu pflegen.

      Aktuell sieht das Script mit nur zwei Karten-IDs so aus:
      a6ee8875-1a0a-4995-a94c-8d2051c5c572-image.png

      Jetzt kam mir der Gedanke, eine "externe" Datenquelle anzubinden. In dieser Datenquelle sind anhand der Karten-ID die Quelle (z.b. Spotify oder Amazon Music) und der zugehörige Alexa-Befehl hinterlegt (z.B. "Spiele Playlist Leo Lausemaus Folge 1"). Legt mein Sohn die Karte mit der ID 6970fbb2 auf, soll sich das Script aus der Datenquelle die Quelle und den Befehl für Alexa raussuchen und in die Variablen schreiben, welche dann im Script weiterverwendet werden.

      Wie erreiche ich das und mit welcher Datenquelle?
      In Powershell würde ich jetzt als Datenquelle vermutlich eine XML schreiben und diese dann zur Laufzeit einlesen. Hier bin ich allerdings überfragt.
      Auf meine Synology hätte ich eine MariaDB (MySQL), aber ich habe nichts gefunden, wie man sowas lösen könnte.
      Dann ist mir noch der Gedanke gekommen, dass ich ja die ganzen Karten als Datenpunkte unter userdata pflegen könnte, aber auch hier habe ich nichts gefunden, wie man einen ganzen Ordner einlesen kann und vor allem auch als zweidimensionalen Array speichern kann.

      Jemand eine Idee?

      Viele Grüße
      Tobias

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

      @gfacek sagte:

      wie man einen ganzen Ordner einlesen kann

      Das kann man mittels $Selector.

      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
      • G gfacek

        Hallo,

        ich nutze iobroker nun knapp 2 Jahre und möchte jetzt etwas tiefer in die "Programmierung" einsteigen. Bisher nutze ich nur kleinere Blockly-Scripte, wie "wenn der Aktor betätigt wird, schalte dieses Licht ein", oder "schalte die Heizung aus, wenn das Fenster geöffnet wird", usw.

        Jetzt kam mir die Idee, den CD-Spieler meiner Kinder gegen eine RFID-Jukebox zu ersetzen, wobei die Jukebox ein Amazon Echo ist und der RFID-Reader ein ESP8266 mit entsprechenden Modulen.

        Ich habe nun erreicht, dass beim Auflegen einer RFID-Karte ein MQTT-Datenpunkt mit der entsprechenden ID der Karte beschrieben wird. Auch habe ich ein Blockly, welches anhand dieser ID an Alexa den Befehl zum Abspielen einer Playlist schickt. Bei einigen wenigen Karten ist das so ja noch übersichtlich, aber sobald es in Richtung 20-30-50 Karten geht, wird das unübersichtlich zu pflegen.

        Aktuell sieht das Script mit nur zwei Karten-IDs so aus:
        a6ee8875-1a0a-4995-a94c-8d2051c5c572-image.png

        Jetzt kam mir der Gedanke, eine "externe" Datenquelle anzubinden. In dieser Datenquelle sind anhand der Karten-ID die Quelle (z.b. Spotify oder Amazon Music) und der zugehörige Alexa-Befehl hinterlegt (z.B. "Spiele Playlist Leo Lausemaus Folge 1"). Legt mein Sohn die Karte mit der ID 6970fbb2 auf, soll sich das Script aus der Datenquelle die Quelle und den Befehl für Alexa raussuchen und in die Variablen schreiben, welche dann im Script weiterverwendet werden.

        Wie erreiche ich das und mit welcher Datenquelle?
        In Powershell würde ich jetzt als Datenquelle vermutlich eine XML schreiben und diese dann zur Laufzeit einlesen. Hier bin ich allerdings überfragt.
        Auf meine Synology hätte ich eine MariaDB (MySQL), aber ich habe nichts gefunden, wie man sowas lösen könnte.
        Dann ist mir noch der Gedanke gekommen, dass ich ja die ganzen Karten als Datenpunkte unter userdata pflegen könnte, aber auch hier habe ich nichts gefunden, wie man einen ganzen Ordner einlesen kann und vor allem auch als zweidimensionalen Array speichern kann.

        Jemand eine Idee?

        Viele Grüße
        Tobias

        F Offline
        F Offline
        fastfoot
        schrieb am zuletzt editiert von
        #3

        @gfacek
        Du kannst auch eine JSON Datei nehmen und diese in einen DP schreiben, oder wie im Beispiel in die Variable kopieren

        {"ids":{
        	"1":{"quelle":"Spotify","text":"dein Spotify-text"},
        	"2":{"quelle":"Alexa","text":"dein Alexa text"},
        	"3":{"quelle":"q3","text":"dein q3 text"},
        	"4":{"quelle":"q4","text":"dein q4 text"},
        	"5":{"quelle":"q5","text":"dein q5 text"},
        	"6":{"quelle":"q6","text":"dein q6 text"},
        	"7":{"quelle":"q7","text":"dein q7 text"}
        	}
        }
        


        Playlist.PNG

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable id="l_jvAv:PhxbM^cb/RDzo">playlist</variable>
           <variable id="qt6*k+lUe.p)g5:4]Nc,">rfid</variable>
           <variable id="$UBA1-GrM6`Q.9S*W!4~">attrQuelle</variable>
           <variable id="bNnZ60e)%r_{09Oa}Lh_">attrText</variable>
         </variables>
         <block type="variables_set" id="`uX%8zgL*1XT+w5dO]o:" x="187" y="163">
           <field name="VAR" id="l_jvAv:PhxbM^cb/RDzo">playlist</field>
           <value name="VALUE">
             <block type="text" id="=@ljuCt?@!uiRo77@`SY">
               <field name="TEXT">{"ids":{ 	"1":{"quelle":"Spotify","text":"dein Spotify-text"}, 	"2":{"quelle":"Alexa","text":"dein Alexa text"}, 	"3":{"quelle":"q3","text":"dein q3 text"}, 	"4":{"quelle":"q4","text":"dein q4 text"}, 	"5":{"quelle":"q5","text":"dein q5 text"}, 	"6":{"quelle":"q6","text":"dein q6 text"}, 	"7":{"quelle":"q7","text":"dein q7 text"} 	} }</field>
             </block>
           </value>
           <next>
             <block type="variables_set" id="b_`OB:ogVoMrQ{HvSYBw">
               <field name="VAR" id="qt6*k+lUe.p)g5:4]Nc,">rfid</field>
               <value name="VALUE">
                 <block type="text" id="39IN.Ik}zL#]Y#!sC7a,">
                   <field name="TEXT">2</field>
                 </block>
               </value>
               <next>
                 <block type="variables_set" id="!M:5#dupo0Fsd]@`#CQt">
                   <field name="VAR" id="$UBA1-GrM6`Q.9S*W!4~">attrQuelle</field>
                   <value name="VALUE">
                     <block type="text_join" id="#WGT+[?V|Rc##$(%S3jJ" inline="true">
                       <mutation items="3"></mutation>
                       <value name="ADD0">
                         <block type="text" id="@ymonzpPZ1gibX,kY]wb">
                           <field name="TEXT">ids.</field>
                         </block>
                       </value>
                       <value name="ADD1">
                         <block type="variables_get" id="AG13{EZrkxczLuKdO)n(">
                           <field name="VAR" id="qt6*k+lUe.p)g5:4]Nc,">rfid</field>
                         </block>
                       </value>
                       <value name="ADD2">
                         <block type="text" id="d,sF0sWtB.x9mDbBtDP~">
                           <field name="TEXT">.quelle</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <next>
                     <block type="variables_set" id="1c:/p~P0FkQ.syX:-2O@">
                       <field name="VAR" id="bNnZ60e)%r_{09Oa}Lh_">attrText</field>
                       <value name="VALUE">
                         <block type="text_join" id="I`-50W-r=)C#iv?,YDR/" inline="true">
                           <mutation items="3"></mutation>
                           <value name="ADD0">
                             <block type="text" id="%1brly3:(B3|~9J|)`Gz">
                               <field name="TEXT">ids.</field>
                             </block>
                           </value>
                           <value name="ADD1">
                             <block type="variables_get" id="{QDfoCc+VBsNR4-u;[^B">
                               <field name="VAR" id="qt6*k+lUe.p)g5:4]Nc,">rfid</field>
                             </block>
                           </value>
                           <value name="ADD2">
                             <block type="text" id="t@A#1RS},[$v-j[IWnSx">
                               <field name="TEXT">.text</field>
                             </block>
                           </value>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="Gtb^t/7imSvzEzF}4IOl" inline="true">
                           <field name="Severity">log</field>
                           <value name="TEXT">
                             <shadow type="text" id="!uXgISDN)EF.IN$o7XW,">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="get_attr" id="UxCy}eF6Qj!(aM;`I-h=">
                               <value name="PATH">
                                 <shadow type="text" id="NGzF19.X17ubJ~]pFM_)">
                                   <field name="TEXT"></field>
                                 </shadow>
                                 <block type="variables_get" id="z4!MiXm5j6)f.-7L!c$d">
                                   <field name="VAR" id="$UBA1-GrM6`Q.9S*W!4~">attrQuelle</field>
                                 </block>
                               </value>
                               <value name="OBJECT">
                                 <block type="variables_get" id="A}@{-y?u|ePD)[eeRGh@">
                                   <field name="VAR" id="l_jvAv:PhxbM^cb/RDzo">playlist</field>
                                 </block>
                               </value>
                             </block>
                           </value>
                           <next>
                             <block type="debug" id="n!H17p]i_3hn|Hiv;Ob-" inline="true">
                               <field name="Severity">log</field>
                               <value name="TEXT">
                                 <shadow type="text">
                                   <field name="TEXT">test</field>
                                 </shadow>
                                 <block type="get_attr" id="Oc(ALK1;`x.{vld0K76F">
                                   <value name="PATH">
                                     <shadow type="text" id="7O~EjP35uf])4ls6-`Xy">
                                       <field name="TEXT"></field>
                                     </shadow>
                                     <block type="variables_get" id="/=mQnU,c5hr_+o~BPKSq">
                                       <field name="VAR" id="bNnZ60e)%r_{09Oa}Lh_">attrText</field>
                                     </block>
                                   </value>
                                   <value name="OBJECT">
                                     <block type="variables_get" id="e}Tk7B4|w4Aa_v(vC90!">
                                       <field name="VAR" id="l_jvAv:PhxbM^cb/RDzo">playlist</field>
                                     </block>
                                   </value>
                                 </block>
                               </value>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                   </next>
                 </block>
               </next>
             </block>
           </next>
         </block>
        </xml>
        

        iobroker läuft unter Docker auf QNAP TS-451+
        SkriptRecovery: https://forum.iobroker.net/post/930558

        1 Antwort Letzte Antwort
        0
        • G Offline
          G Offline
          gfacek
          schrieb am zuletzt editiert von
          #4

          Vielen Dank für die beiden Vorschläge. Ich schaue mir beides einmal an.

          @paul53
          Die Variante mit dem $Selector habe ich in irgendeinem Script schon einmal gesehen. Vielleich habe ich das noch irgendwo in meinen Drafts.

          @fastfoot
          Spontan ist das für mich am nachvollziehbarsten. Zumindest scheinbar die am schnellsten umsetzbare Lösung.

          1 Antwort Letzte Antwort
          0
          • G Offline
            G Offline
            gfacek
            schrieb am zuletzt editiert von
            #5

            @fastfoot
            Puh, jetzt muss ich doch mal doof fragen. Grundsätzlich funktioniert dein Vorschlag.
            Ich habe variable "playlist" jetzt so wie bei dir manuell reinkopiert. Das läuft schon mal.
            Wenn ich das JSON jetzt in einen Datenpunkt verwalten möchte...wie würde ich das dann am geschicktesten machen?

            F 1 Antwort Letzte Antwort
            0
            • G gfacek

              @fastfoot
              Puh, jetzt muss ich doch mal doof fragen. Grundsätzlich funktioniert dein Vorschlag.
              Ich habe variable "playlist" jetzt so wie bei dir manuell reinkopiert. Das läuft schon mal.
              Wenn ich das JSON jetzt in einen Datenpunkt verwalten möchte...wie würde ich das dann am geschicktesten machen?

              F Offline
              F Offline
              fastfoot
              schrieb am zuletzt editiert von
              #6

              @gfacek Du legst einen DP unter 0_userdata.0 an (type=string) und kopierst das json da rein. ich persönlich sehe da aber keinen Vorteil drin, weil es sich da super schlecht bearbeitenn lässt. Wenn du es dann doch aus einem textfile kopierst, kannst du es auch gleich in die Variable kopieren.

              iobroker läuft unter Docker auf QNAP TS-451+
              SkriptRecovery: https://forum.iobroker.net/post/930558

              1 Antwort Letzte Antwort
              0
              • G Offline
                G Offline
                gfacek
                schrieb am zuletzt editiert von gfacek
                #7

                Ah, ok. Ich dachte, dass es sich dann ähnlich komfortabel verwalten lässt, wie in deinem Codeschnipsel oben. Aber hast recht, dann kann ich es gleich lieber in einer Textdatei verwalten und wenn ich Änderungen habe, einfach per Copy/Paste in die Variable stecken.

                Insgesamt bin ich erstmal so zufrieden mit...vielen Dank!

                So sieht es derzeit aus:
                8e76ea32-fc7f-468d-9013-f3fb2e9484e5-image.png

                var playlist, rfid, attrQuelle, attrText;
                
                
                playlist = '{"ids":{ 	"6970fbb2":{"quelle":"Spotify","text":"Spiele Playlist Sommer"}, 	"a90212b4":{"quelle":"Alexa","text":"Spiele Lollipop"} 	} }';
                on({id: "mqtt.0.rfid_reader.uid"/*/rfid_reader/uid*/, change: "any"}, function (obj) {
                  var value = obj.state.val;
                  var oldValue = obj.oldState.val;
                  console.log(('Karten-ID = ' + String((obj.state ? obj.state.val : ""))));
                  rfid = (obj.state ? obj.state.val : "");
                  attrQuelle = ['ids.',rfid,'.quelle'].join('');
                  attrText = ['ids.',rfid,'.text'].join('');
                  console.log((['Quelle = ',String(getAttr(playlist, attrQuelle)),'// Alexa-Befehl = ',String(getAttr(playlist, attrText))].join('')));
                  if (String(getAttr(playlist, attrQuelle)) == 'Spotify') {
                    setState("alexa2.0.Echo-Devices.G0911M1001330NV7.Music-Provider.Spotify-Playlist"/*Playlist to play with Spotify*/, (String(getAttr(playlist, attrText))));
                  }
                  if (String(getAttr(playlist, attrQuelle)) == 'AmazonMusic') {
                    setState("alexa2.0.Echo-Devices.G0911M1001330NV7.Music-Provider.Amazon-Music"/*Phrase to play with Amazon Music*/, (String(getAttr(playlist, attrText))));
                  }
                });
                

                F 1 Antwort Letzte Antwort
                0
                • G gfacek

                  Ah, ok. Ich dachte, dass es sich dann ähnlich komfortabel verwalten lässt, wie in deinem Codeschnipsel oben. Aber hast recht, dann kann ich es gleich lieber in einer Textdatei verwalten und wenn ich Änderungen habe, einfach per Copy/Paste in die Variable stecken.

                  Insgesamt bin ich erstmal so zufrieden mit...vielen Dank!

                  So sieht es derzeit aus:
                  8e76ea32-fc7f-468d-9013-f3fb2e9484e5-image.png

                  var playlist, rfid, attrQuelle, attrText;
                  
                  
                  playlist = '{"ids":{ 	"6970fbb2":{"quelle":"Spotify","text":"Spiele Playlist Sommer"}, 	"a90212b4":{"quelle":"Alexa","text":"Spiele Lollipop"} 	} }';
                  on({id: "mqtt.0.rfid_reader.uid"/*/rfid_reader/uid*/, change: "any"}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                    console.log(('Karten-ID = ' + String((obj.state ? obj.state.val : ""))));
                    rfid = (obj.state ? obj.state.val : "");
                    attrQuelle = ['ids.',rfid,'.quelle'].join('');
                    attrText = ['ids.',rfid,'.text'].join('');
                    console.log((['Quelle = ',String(getAttr(playlist, attrQuelle)),'// Alexa-Befehl = ',String(getAttr(playlist, attrText))].join('')));
                    if (String(getAttr(playlist, attrQuelle)) == 'Spotify') {
                      setState("alexa2.0.Echo-Devices.G0911M1001330NV7.Music-Provider.Spotify-Playlist"/*Playlist to play with Spotify*/, (String(getAttr(playlist, attrText))));
                    }
                    if (String(getAttr(playlist, attrQuelle)) == 'AmazonMusic') {
                      setState("alexa2.0.Echo-Devices.G0911M1001330NV7.Music-Provider.Amazon-Music"/*Phrase to play with Amazon Music*/, (String(getAttr(playlist, attrText))));
                    }
                  });
                  

                  F Offline
                  F Offline
                  fastfoot
                  schrieb am zuletzt editiert von
                  #8

                  @gfacek Du kannst die Id's auch direkt von der Datei einlesen, falls sie in der Shell zugänglich ist
                  Playlist1.PNG

                  iobroker läuft unter Docker auf QNAP TS-451+
                  SkriptRecovery: https://forum.iobroker.net/post/930558

                  1 Antwort Letzte Antwort
                  0
                  • G Offline
                    G Offline
                    gfacek
                    schrieb am zuletzt editiert von
                    #9

                    Coole Idee...muss ich mal gucken, was am Ende einfacher ist. Ob ich eher auf iobroker:8081 und dort unter Scripts gehe, oder ob ich irgendwie über winscp an die Datei im Filesystem vom iobroker gehe.
                    Wenn ich den Weg über die Anpassung des Scripts gehe, muss ich das dann auch speichern und somit wird die Variable dann auch gleich eingelesen.

                    Aktuell bin ich erstmal zufrieden mit der Lösung.

                    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

                    643

                    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