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] Blockly schießt den iobroker ab

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

[gelöst] Blockly schießt den iobroker ab

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
19 Beiträge 4 Kommentatoren 1.7k 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.
  • B Offline
    B Offline
    berndroid
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    ich habe ein mittelgroßes Problem mit blockly und dem Broker. Die Aufgabenstellung soll eigentlich sein, das Licht vom Xiaomi Gateway im Sekundentakt blinken zu lassen, wenn eine Bedingung gegeben ist. In zahlreichen Versuchen habe ich es nicht hinbekommen. Egal was ich versuche, der Broker hängt sich nach kurzer Zeit komplett auf und ich muss die VM auf der der Broker läuft neu starten. Da bei jedem Versuch, kurz bevor der Broker nicht mehr reagiert, im Log ein "Invalid Key" vom Xiaomi angezeigt wird, habe ich mal das Gateway außen vor gelassen und versucht, stattdessen einen Sonoff zu schalten. Gleiches Ergebnis. Das Skript im Bild lässt den Broker sofort sterben. Entferne ich die Wiederholungsschleife, schaltet das Flurlicht gar nicht. Kann mir hier jemand erklären, warum?
    6488_screenshot_2018-03-18_10.59.31.png
    6488_screenshot_2018-03-18_10.53.06.png

    1 Antwort Letzte Antwort
    0
    • R Offline
      R Offline
      RappiRN
      Most Active
      schrieb am zuletzt editiert von
      #2

      Vor der Verwendung von Schleifen in Blockly sei hier nochmal ausdrücklich gewarnt. Wenn dieses Blockly, ohne dass ich es mir jetzt genauer angesehen habe, deine ioBroker Installation lahmlegt, bitte nicht weiter verwenden. Versuche lieber eine Logik mit höchstens timeout-Blöcken zu erstellen, aber auch bei diesen musst du sicherstellen, dass sie nicht vielfach gestartet werden ohne auch wieder sicher beendet zu werden!

      Versuch dein Glück, vielleicht kann dir auch ein Profi ne bessere Programmierung für dein Beispiel erstellen.

      Enrico

      1 Antwort Letzte Antwort
      0
      • rantanplanR Offline
        rantanplanR Offline
        rantanplan
        schrieb am zuletzt editiert von
        #3

        @berndroid:

        Egal was ich versuche, der Broker hängt sich nach kurzer Zeit komplett auf und ich muss die VM auf der der Broker läuft neu starten. Da bei jedem Versuch, kurz bevor der Broker nicht mehr reagiert, im Log ein "Invalid Key" vom Xiaomi angezeigt wird, habe ich mal das Gateway außen vor gelassen und versucht, stattdessen einen Sonoff zu schalten. Gleiches Ergebnis. Das Skript im Bild lässt den Broker sofort sterben. Entferne ich die Wiederholungsschleife, schaltet das Flurlicht gar nicht. Kann mir hier jemand erklären, warum? `
        Hallo berndroid

        Wie RappiRN schon geschrieben hat Intervalle, Schleifen usw. sind mit Vorsicht und Bedacht zu gebrauchen.

        Anfänger unterschätzen meist wie schnell so ein Programm abläuft.

        1. Dein Intervall beschreibt, einmal gestartet, IMMER jede Sekunde einen Datenpunkt.

        Allein das ist eine Belastung für das System, die völlig unnötig ist.

        2. "wiederhole solange…."

        So eine Schleife "rast" im Millisekundenbereich!!!!!!

        So lange "Deckenlicht.Power = wahr" wird Deine Schleife ca. 1000 (in Worten TAUSEND) mal pro Sekunde ausgeführt.

        Dein "timer.1000" wird nur alle 1000 ms umgeschaltet.

        Je nachdem welchen Status "timer.1000" hat wird "Flurlicht Power" 1000x/Sek. eingeschaltet oder 1000x/Sek. ausgeschaltet.

        Ich glaube kaum, das Dein "Flurlicht Power" 1000x pro Sekunde geschaltet werden kann.

        Aber ioBroker wird es auf jeden Fall versuchen. :shock:

        Jeder Befehl wird auf einen "Stapel" gelegt.

        Der Stapel wird dann abgearbeitet.

        Bei Deinem Programm hat ioBroker aber NIE auch nur den Hauch eine Chance den Stapel abzuarbeiten.

        Also wächst der Stapel unaufhörlich, bis der Speicher voll ist und das System seine Arbeit einstellt.

        Grüße

        Rantanplan

        CCU3 / MS Server 2019(VM) / Scripten mit Blockly

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          berndroid
          schrieb am zuletzt editiert von
          #4

          Ah, ok. Danke für eure Erklärungen.

          Aber wie kann ich denn ein blinkendes Licht am Xiaomi nun in blockly realisieren?

          Irgendwie bin ich zu…einfach gestrickt um das hinzubekommen :(

          Edit: Was ich mich noch frage: Warum gibt es dann überhaupt die Schleifen in blockly, wenn sie nicht (wie Nichtprogrammierer denken) funktionieren?

          1 Antwort Letzte Antwort
          0
          • rantanplanR Offline
            rantanplanR Offline
            rantanplan
            schrieb am zuletzt editiert von
            #5

            @berndroid:

            Irgendwie bin ich zu…einfach gestrickt um das hinzubekommen :( `
            Eben nicht… Du hast zu kompliziert gedacht ;)

            @berndroid:

            Edit: Was ich mich noch frage: Warum gibt es dann überhaupt die Schleifen in blockly, wenn sie nicht (wie Nichtprogrammierer denken) funktionieren? `
            Es gibt ja nicht nur "Nichtprogrammierer". Vielleicht gehörst Du ja auch bald zu den "Programmierern". Übung macht den "Programmierer" ;)

            @berndroid:

            Aber wie kann ich denn ein blinkendes Licht am Xiaomi nun in blockly realisieren? `

            Eventuell so. (nicht getestet, sollte aber klappen)
            147_beispiel.png

            Export:

            ! ````
            <xml xmlns="http://www.w3.org/1999/xhtml"><block type="comment" id="?zeKM?+`NO|SyPD9vCyq" x="63" y="-37"><field name="COMMENT">Deckenlicht POWER triggern</field>
            <next><block type="on_ext" id="xOtL7XU~}*{{IcuwY2M#"><mutation items="1"></mutation>
            <field name="CONDITION">ne</field>

                <value name="OID0"><shadow type="field_oid" id="9];iX:KnN?h!}{fJYNM@"><field name="oid">default</field></shadow></value> 
                <statement name="STATEMENT"><block type="comment" id="gHtB5hP@,3ogP+=5q6hQ"><field name="COMMENT">Abfrage Deckenlicht POWER = wahr</field>
                    <next><block type="controls_if" id="2H%p_fwGD~eG]VZ=Rd=S"><mutation else="1"></mutation>
                        <value name="IF0"><block type="logic_compare" id="h`7QYwZ2.q)Ef9OGmFD^"><field name="OP">EQ</field>
                            <value name="A"><block type="get_value" id="{.HaueD%r-@B6oyXM[##"><field name="ATTR">val</field>
                                <field name="OID">ID auswählen</field></block></value> 
                            <value name="B"><block type="logic_boolean" id="(~:@eUP(`hrF.p8zGi*z"><field name="BOOL">TRUE</field></block></value></block></value> 
                        <statement name="DO0"><block type="timeouts_settimeout" id="|8fU{%K_V!6QWL_mk4v;"><field name="NAME">timeout</field>
                            <field name="DELAY">1</field>
                            <field name="UNIT">sec</field>
                            <statement name="STATEMENT"><block type="comment" id="mbrAIdBS]~^d86lw88W0"><field name="COMMENT">Flurlicht an/aus</field>
                                <next><block type="toggle" id="(_UwC+XTStO3:/1%!:tI"><mutation delay_input="false"></mutation>
                                    <field name="OID">Object ID</field>
                                    <field name="WITH_DELAY">FALSE</field></block></next></block></statement></block></statement> 
                        <statement name="ELSE"><block type="comment" id="FoKYUP+x+mJ-0p-bJ;TH"><field name="COMMENT">GANZ WICHTIG!!!</field>
                            <next><block type="comment" id="]r}}Rkp{1z,2cVUFGU%n"><field name="COMMENT">Timer STOPPEN !!!!</field>
                                <next><block type="timeouts_cleartimeout" id="3V*3%vD}R2mDt}=%[Yoz"><field name="NAME">timeout</field>
                                    <next><block type="comment" id="^#:^N_G!#2A(BmTgcI0j"><field name="COMMENT">Man sollte nur schalten wenn es</field>
                                        <next><block type="comment" id="@K~QgPvF_Z#_iM}Dw]%;"><field name="COMMENT">etwas zu schalten gibt.</field>
                                            <next><block type="comment" id="]rLoSh?H/W(q}`%1LBY8"><field name="COMMENT">Also Status Flurlicht abfragen</field>
                                                <next><block type="controls_if" id="T=zJr3u9;iL;eEUdCp0^"><value name="IF0"><block type="logic_compare" id="]Qrf:Bi@dU]|E73q3Lj:"><field name="OP">EQ</field>
                                                        <value name="A"><block type="get_value" id="Qt(KubhnWN,D%?([1zY/"><field name="ATTR">val</field>
                                                            <field name="OID">ID auswählen</field></block></value> 
                                                        <value name="B"><block type="logic_boolean" id="0.jd{sIC|}}]r1R_UjSH"><field name="BOOL">TRUE</field></block></value></block></value> 
                                                    <statement name="DO0"><block type="comment" id="cxm4U#rL~~XucP_t+-_L"><field name="COMMENT">Flurlicht aus</field>
                                                        <next><block type="control" id="k7Mysg_PQ^Py{3YC=g/!"><mutation delay_input="false"></mutation>
                                                            <field name="OID">Object ID</field>
                                                            <field name="WITH_DELAY">FALSE</field>
                                                            <value name="VALUE"><block type="logic_boolean" id="!;0hl|nV2hC0Yo}}]czJ"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></statement></block></next></block></xml> 
            

            ! ````

            Grüße

            Rantanplan

            CCU3 / MS Server 2019(VM) / Scripten mit Blockly

            1 Antwort Letzte Antwort
            0
            • B Offline
              B Offline
              berndroid
              schrieb am zuletzt editiert von
              #6

              Sehr schön, Vielen Dank! Ich werde das testen und berichten. Allerdings habe ich ein Verständnisproblem. Wenn jetzt nur einmal der Trigger kommt, wird die "Schleife" nur einmal durchlaufen, oder?

              Dann müsste ich nämlich mal überlegen, wie ich mein konkretes Problem gelöst bekomme.

              Ich beschreibe es mal kurz:

              In letzter Zeit habe ich das Problem, dass mein Netz von der Telekom gestört ist. Ich (also eher meine Frau) hätte gerne eine optische Meldung, wenn das Netz weg ist. Da ich keine Fritzbox, sondern Zeug von Ubiquiti nutze, frage ich den UniFi-Adapter ab, ob sich die IP geändert hat (mein Trigger).

              Wenn WAN-IP = 0.0.0.0 = Kein Netz, Gateway soll blinken.

              Wenn WAN-IP =! 0.0.0.0 = Alles in Ordnung

              Mit deiner Vorlage versuche ich es mal weiter. Man wird ja nicht dümmer dabei ;)

              Ich werde berichten.

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                Für Blinklicht ist der Timeout-Baustein "Ausführen Intervall" am Besten geeignet: Starten innerhalb des Triggers, wenn IP = 0.0.0.0 und stoppen, wenn nicht.

                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
                • rantanplanR Offline
                  rantanplanR Offline
                  rantanplan
                  schrieb am zuletzt editiert von
                  #8

                  @paul53:

                  Für Blinklicht ist der Timeout-Baustein "Ausführen Intervall" am Besten geeignet: `
                  Jepp, habe falschen Baustein genommen :roll:

                  @paul53:

                  Starten innerhalb des Triggers, wenn IP = 0.0.0.0 und stoppen, wenn nicht. `
                  Oder den Ping Adapter nehmen.

                  Grüße

                  Rantanplan

                  CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #9

                    Vielleicht so
                    493_blockly_blink_ohneip.jpg

                    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
                    1
                    • B Offline
                      B Offline
                      berndroid
                      schrieb am zuletzt editiert von
                      #10

                      Ich kann mich nicht genug bei euch bedanken. Aber irgendwie ist blockly unlogisch.

                      Verstärker ist wahr. Ich triggere Deckenlicht. Licht blinkt. Allerdings sehr unregelmäßig. Mal im Sekundentakt, dann bleibt es mal 10 Sekunden an um dann fünf Sekunden aus zu bleiben usw.

                      Schalte ich Verstärker auf unwahr, blinkt das Licht dennoch unregelmäßig weiter. Auch wenn ich jetzt Deckenlicht triggere, blinkt das Licht noch weiter. Ich kanns mir nicht erklären :(
                      6488_screenshot_2018-03-18_20.02.28.png
                      6488_screenshot_2018-03-18_19.59.43.png

                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #11

                        Welchen Sinn soll das ergeben: Triggern auf "Deckenlicht POWER", aber Entscheidungswert "Verstärker POWER" ?

                        Es muss der Intervall-Timer gestoppt werden, der vorher aktiviert wurde ! Also nicht Intervall2 stoppen, sondern Intervall.

                        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
                        • R Offline
                          R Offline
                          RappiRN
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          An Blockly wird es wohl nicht liegen, die Befehle werden bestimmt alle gesendet, das könntest du prüfen, indem du noch debug-Blöcke da einfügst, wo du schaltest.

                          Es wird eher an der Abarbeitung der Blink-Befehle im Gateway liegen, das ist ja für sowas nicht gedacht und wird sich an den Befehlen im Sekundentakt verschlucken, aber eben noch alle abarbeiten, obwohl der Scripttrigger schon längst wieder aus ist. (Edit: dafür hat paul ja die Erklärung geliefert!)

                          Ich weiß jetzt nicht, wieviel Befehle das Gateway verkraftet, aber du kannst ja mal versuchen, die Blinkfrequenz zu verringern, alle 5 oder gar 10 sek. Ob es dann noch die optische Wirkung hat, die du haben möchtest, ist dabei ne andere Frage. :)

                          Enrico

                          1 Antwort Letzte Antwort
                          0
                          • B Offline
                            B Offline
                            berndroid
                            schrieb am zuletzt editiert von
                            #13

                            Oh, das mit Intervall2 ist mir entgangen :/

                            Das triggern ist eigentlich nur zum testen. Ist es nicht egal, welchen Wert ich abfrage wenn getriggert wird?

                            Modemkabel jedes mal rausziehen zum testen zieht hier immer so viel Geschrei nach sich ;)

                            Aber mal ernsthaft gefragt: Muss ich den Wert den ich abfragen möchte auch als Trigger nutzen?

                            1 Antwort Letzte Antwort
                            0
                            • B Offline
                              B Offline
                              berndroid
                              schrieb am zuletzt editiert von
                              #14

                              @RappiRN:

                              Ich weiß jetzt nicht, wieviel Befehle das Gateway verkraftet, aber du kannst ja mal versuchen, die Blinkfrequenz zu verringern, alle 5 oder gar 10 sek. Ob es dann noch die optische Wirkung hat, die du haben möchtest, ist dabei ne andere Frage. :)

                              Enrico `

                              :lol: Die hat es dann nicht. Aber auch das werde ich mal testen.

                              1 Antwort Letzte Antwort
                              0
                              • B Offline
                                B Offline
                                berndroid
                                schrieb am zuletzt editiert von
                                #15

                                Nochmal ne doofe Frage: Der im Bild markierte "Wert" der im Trigger-Menü zu finden ist, welchen Wert nimmt der denn an, bzw voher kommt der Wert? Sehe ich das richtig, das das hier im Beispiel die IP-Adresse wäre, weil die Object ID im Falls Objekt abgefragt wird?

                                Edit: Hat evtl jemand einen Link zu ner Doku zu blockly?
                                6488_screenshot_2018-03-18_20.48.55.png

                                1 Antwort Letzte Antwort
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #16

                                  @berndroid:

                                  Muss ich den Wert den ich abfragen möchte auch als Trigger nutzen? `
                                  Nicht unbedingt, aber es fördert das Verständnis für die endgültige Funktion des Scripts.
                                  @berndroid:

                                  Der im Bild markierte "Wert" der im Trigger-Menü zu finden ist, welchen Wert nimmt der denn an, bzw voher kommt der Wert? `
                                  Das ist der Wert des auslösenden Datenpunktes: Wert = value = obj.state.val

                                  Zum Testen mit dem Deckenlicht genügt die Abfrage: falls Wert (oder: falls Wert = wahr)

                                  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
                                  • rantanplanR Offline
                                    rantanplanR Offline
                                    rantanplan
                                    schrieb am zuletzt editiert von
                                    #17

                                    @berndroid:

                                    Nochmal ne doofe Frage: Der im Bild markierte "Wert" der im Trigger-Menü zu finden ist, welchen Wert nimmt der denn an, bzw voher kommt der Wert?

                                    Edit: Hat evtl jemand einen Link zu ner Doku zu blockly? `
                                    Einmal hier http://www.iobroker.net/docu/?page_id=5319&lang=de

                                    und hier https://github.com/ioBroker/ioBroker.ja … blockly.md

                                    Paul53 greift gern in die Vollen, dies ist für einen Anfänger manchmal schwer zu verstehen ;)

                                    Nimm erstmal die "normalen" Bausteine. Wenn Du sicherer bist und das Grundprinzip verstanden hast, kannst Du ans optimieren gehen.

                                    Hier nochmal mein geändertes Blockly.

                                    Der "umschalten" Baustein toggelt immer zwischen wahr und unwahr hin und her.

                                    Da muss man den Zustand nicht vorher in einer Variablen umschalten.
                                    147_beispiel.png

                                    Deine WAN Abfrage kannst Du genauso aufbauen.

                                    Wie schon gesagt schau Dir mal den "Ping" Adapter an.

                                    Damit kannst Du interne und externe IP-Adressen überwachen.

                                    Der Adapter legt pro überwachte Adresse einen Datenpunkt an, den Du in Blockly triggern kannst und/oder in VIS darstellen.

                                    Grüße

                                    Rantanplan

                                    CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                                    1 Antwort Letzte Antwort
                                    0
                                    • B Offline
                                      B Offline
                                      berndroid
                                      schrieb am zuletzt editiert von
                                      #18

                                      @paul53:

                                      @berndroid:

                                      Der im Bild markierte "Wert" der im Trigger-Menü zu finden ist, welchen Wert nimmt der denn an, bzw voher kommt der Wert? `
                                      Das ist der Wert des auslösenden Datenpunktes: Wert = value = obj.state.val

                                      Hab ich ehrlich gesagt nicht wirklich verstanden, aber dank der Doku von ^ da oben weiß ich jetzt bescheid ;)

                                      @rantanplan:

                                      Paul53 greift gern in die Vollen, dies ist für einen Anfänger manchmal schwer zu verstehen ;)

                                      Nimm erstmal die "normalen" Bausteine. `

                                      Oooch, das macht nix. So ist man gezwungen sich weiter zu informieren ;)

                                      Ich bin ja dankbar, dass meine Fragen hier beantwortet werden!

                                      @rantanplan:

                                      Deine WAN Abfrage kannst Du genauso aufbauen.

                                      Wie schon gesagt schau Dir mal den "Ping" Adapter an.

                                      Damit kannst Du interne und externe IP-Adressen überwachen.

                                      Den "Ping" brauche ich wirklich nicht bemühen. Im "Unifi" bekomme ich alle Infos die ich brauche und noch viel mehr :)

                                      Ihr habt mir schonmal viel weiter geholfen, danke!
                                      6488_screenshot_2018-03-18_22.44.50.png

                                      1 Antwort Letzte Antwort
                                      0
                                      • rantanplanR Offline
                                        rantanplanR Offline
                                        rantanplan
                                        schrieb am zuletzt editiert von
                                        #19

                                        Wenn alles funktioniert, setze bitte ein [gelöst] in den Betreff Deines ersten Beitrags.

                                        Danke.

                                        Grüße

                                        Rantanplan

                                        CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                                        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

                                        572

                                        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