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. Gelöst: Http Request rausfinden

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.3k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.6k

Gelöst: Http Request rausfinden

Geplant Angeheftet Gesperrt Verschoben Blockly
11 Beiträge 3 Kommentatoren 1.0k 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.
  • R Offline
    R Offline
    RomN
    schrieb am zuletzt editiert von RomN
    #1

    Hallo Zusammen

    Ich bin nicht sonderlich stark in dem Bereich wo ich mich gerade Versuche drin, sprich wenn meine Sprache/Begriffe nicht korrekt sind, gerne korrigieren.

    Ich versuche einen Beamer per Blockly Script auszuschalten. Leider hat der Beamer kein PJ-Link, scheinbar kann man ihn über Crestron steuern, was ich aber soweit ich verstanden habe nicht nutzen kann mit IO-Broker.

    Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

    Habt ihr mir Tipps/Suchbegriffe/Ansätze wie ich rausbekomme was gesendet wird wenn ich den Off Button im Webinterface drücke?

    Einschalten kann/muss ich den Beamer via WOL was bestens funktioniert.

    M OliverIOO 2 Antworten Letzte Antwort
    0
    • R RomN

      Hallo Zusammen

      Ich bin nicht sonderlich stark in dem Bereich wo ich mich gerade Versuche drin, sprich wenn meine Sprache/Begriffe nicht korrekt sind, gerne korrigieren.

      Ich versuche einen Beamer per Blockly Script auszuschalten. Leider hat der Beamer kein PJ-Link, scheinbar kann man ihn über Crestron steuern, was ich aber soweit ich verstanden habe nicht nutzen kann mit IO-Broker.

      Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

      Habt ihr mir Tipps/Suchbegriffe/Ansätze wie ich rausbekomme was gesendet wird wenn ich den Off Button im Webinterface drücke?

      Einschalten kann/muss ich den Beamer via WOL was bestens funktioniert.

      M Online
      M Online
      MCU
      schrieb am zuletzt editiert von
      #2

      @romn Beamer Hersteller, ID, Type usw. Wo gekauft. Sind Hinweise um besser an die daten zu kommen.

      NUC i7 64GB mit Proxmox ---- Jarvis Infos Aktualisierungen der Doku auf Instagram verfolgen -> mcuiobroker Instagram
      Wenn Euch mein Vorschlag geholfen hat, bitte rechts "^" klicken.

      R 1 Antwort Letzte Antwort
      0
      • R RomN

        Hallo Zusammen

        Ich bin nicht sonderlich stark in dem Bereich wo ich mich gerade Versuche drin, sprich wenn meine Sprache/Begriffe nicht korrekt sind, gerne korrigieren.

        Ich versuche einen Beamer per Blockly Script auszuschalten. Leider hat der Beamer kein PJ-Link, scheinbar kann man ihn über Crestron steuern, was ich aber soweit ich verstanden habe nicht nutzen kann mit IO-Broker.

        Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

        Habt ihr mir Tipps/Suchbegriffe/Ansätze wie ich rausbekomme was gesendet wird wenn ich den Off Button im Webinterface drücke?

        Einschalten kann/muss ich den Beamer via WOL was bestens funktioniert.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #3

        @romn sagte in Http Request rausfinden:

        Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

        ja da bist du schon auf dem richtigen weg.
        hoffe mal darauf, das da keine extra authentifizierung mit dabei ist.
        um es einzugrenzen öffnest du das webinterface und die developer tools des browsers.
        dann gehst du in den netzwerk tab.
        dann löscht du die angezeigte historie,
        dann drückst du den knopf für das ein und ausschalten.
        bei den dann angezeigten zeilen sind das request mit dabei, das den schaltbefehl enthält.
        die schaut man sich an und hoffentlich ist es nur ein request.

        den versucht man dann nachzustellen. da kann man oft einige header angaben entfernen.
        der blockly-request ist leider etwas eingeschränkt und kann nicht so gut konfiguriert werden, daher empfehle ich dir das mit javascript umzusetzen.

        wenn man in den developer tools auf dem request rechte maustaste macht, gibt es (zumindest im chrome) einen Befehl "copy -> copy as node.js fetch"
        wenn man dann noch im javascript adapter diese bibliothek installiert, dann kann man den Befehl 1:1 übernehmen
        https://www.npmjs.com/package/node-fetch

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

        R 1 Antwort Letzte Antwort
        0
        • M MCU

          @romn Beamer Hersteller, ID, Type usw. Wo gekauft. Sind Hinweise um besser an die daten zu kommen.

          R Offline
          R Offline
          RomN
          schrieb am zuletzt editiert von
          #4

          @mcu da ich da schon ziemlich viel Zeit verwendet hab, hab ich das weggelassen aber es handelt sich um einen Acer P5630

          1 Antwort Letzte Antwort
          0
          • OliverIOO OliverIO

            @romn sagte in Http Request rausfinden:

            Der Beamer hat ein Webinterface über welches ich ih Auschalten kann. Das müsste doch bedeuten dass ich irgendwie mit einem Blockly Script das tun kan was der Browser auch macht? Ich habe versucht das ganze per Google Tools anzuschauen aber nun komme ich nicht mehr weiter.

            ja da bist du schon auf dem richtigen weg.
            hoffe mal darauf, das da keine extra authentifizierung mit dabei ist.
            um es einzugrenzen öffnest du das webinterface und die developer tools des browsers.
            dann gehst du in den netzwerk tab.
            dann löscht du die angezeigte historie,
            dann drückst du den knopf für das ein und ausschalten.
            bei den dann angezeigten zeilen sind das request mit dabei, das den schaltbefehl enthält.
            die schaut man sich an und hoffentlich ist es nur ein request.

            den versucht man dann nachzustellen. da kann man oft einige header angaben entfernen.
            der blockly-request ist leider etwas eingeschränkt und kann nicht so gut konfiguriert werden, daher empfehle ich dir das mit javascript umzusetzen.

            wenn man in den developer tools auf dem request rechte maustaste macht, gibt es (zumindest im chrome) einen Befehl "copy -> copy as node.js fetch"
            wenn man dann noch im javascript adapter diese bibliothek installiert, dann kann man den Befehl 1:1 übernehmen
            https://www.npmjs.com/package/node-fetch

            R Offline
            R Offline
            RomN
            schrieb am zuletzt editiert von
            #5

            @oliverio

            Vieln Dank für deine Antwort. Ich glaube ich bin ein Stück weiter.

            Hier sind die Ausgaben, soweit ich sagen kann, ist keine Authentifizierung nötig. Das Web Interface hat zwar ein Passwort.

            Unter Headers kann ich folgendes finden:

            Request URL:
            http://192.168.1.100/form/control_cgi
            Request Method:
            POST
            Status Code:
            200 OK
            Remote Address:
            192.168.1.100:80
            Referrer Policy:
            strict-origin-when-cross-origin
            HTTP/1.0 200 OK
            Server: GoAhead-Webs
            Pragma: no-cache
            Cache-control: no-cache
            Content-Type: text/html
            POST /form/control_cgi HTTP/1.1
            Accept: */*
            Accept-Encoding: gzip, deflate
            Accept-Language: de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5
            Connection: keep-alive
            Content-Length: 35
            Content-type: application/x-www-form-urlencoded
            Cookie: atop_user=1; atop_pw=1
            Host: 192.168.1.100
            Origin: http://192.168.1.100
            Referer: http://192.168.1.100/control.asp
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
            

            Unter Payload

            pwr: pwr
            

            und bei Preview kam: {pwr:"1",hid:"0",frz:"0",eco:"1",src:"3",bri:"50",con:"50",vks:"0",hks:"0",gam:"2.2",ctp:"CT2",mod:"2",vol:"0",apr:"0",zom:"1.0",prj:"0",lgo:"0",aks:"0",dyar:"31"}

            Das mit dem Node-Fetch habe ich probiert mit der dem folgenden kopierten Script:

            fetch("http://192.168.1.100/form/control_cgi", {
              "headers": {
                "accept": "*/*",
                "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                "content-type": "application/x-www-form-urlencoded"
              },
              "referrer": "http://192.168.1.100/control.asp",
              "referrerPolicy": "strict-origin-when-cross-origin",
              "body": "SendQueryBatchCDM=SendQueryBatchCDM",
              "method": "POST",
              "mode": "cors",
              "credentials": "include"
            });
            

            Kriege dann aber die Meldung:
            12:42:52.238 error javascript.0 (166690) script.js.Projektor_2: ReferenceError: fetch is not defined
            12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:1:1
            12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:14:3

            Ich habe das Gefühl ich sei schon nah dran, aber mir fehlen halt die Basics... kannst du mir nochmals einen Tipp geben?

            OliverIOO 1 Antwort Letzte Antwort
            0
            • R RomN

              @oliverio

              Vieln Dank für deine Antwort. Ich glaube ich bin ein Stück weiter.

              Hier sind die Ausgaben, soweit ich sagen kann, ist keine Authentifizierung nötig. Das Web Interface hat zwar ein Passwort.

              Unter Headers kann ich folgendes finden:

              Request URL:
              http://192.168.1.100/form/control_cgi
              Request Method:
              POST
              Status Code:
              200 OK
              Remote Address:
              192.168.1.100:80
              Referrer Policy:
              strict-origin-when-cross-origin
              HTTP/1.0 200 OK
              Server: GoAhead-Webs
              Pragma: no-cache
              Cache-control: no-cache
              Content-Type: text/html
              POST /form/control_cgi HTTP/1.1
              Accept: */*
              Accept-Encoding: gzip, deflate
              Accept-Language: de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5
              Connection: keep-alive
              Content-Length: 35
              Content-type: application/x-www-form-urlencoded
              Cookie: atop_user=1; atop_pw=1
              Host: 192.168.1.100
              Origin: http://192.168.1.100
              Referer: http://192.168.1.100/control.asp
              User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
              

              Unter Payload

              pwr: pwr
              

              und bei Preview kam: {pwr:"1",hid:"0",frz:"0",eco:"1",src:"3",bri:"50",con:"50",vks:"0",hks:"0",gam:"2.2",ctp:"CT2",mod:"2",vol:"0",apr:"0",zom:"1.0",prj:"0",lgo:"0",aks:"0",dyar:"31"}

              Das mit dem Node-Fetch habe ich probiert mit der dem folgenden kopierten Script:

              fetch("http://192.168.1.100/form/control_cgi", {
                "headers": {
                  "accept": "*/*",
                  "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                  "content-type": "application/x-www-form-urlencoded"
                },
                "referrer": "http://192.168.1.100/control.asp",
                "referrerPolicy": "strict-origin-when-cross-origin",
                "body": "SendQueryBatchCDM=SendQueryBatchCDM",
                "method": "POST",
                "mode": "cors",
                "credentials": "include"
              });
              

              Kriege dann aber die Meldung:
              12:42:52.238 error javascript.0 (166690) script.js.Projektor_2: ReferenceError: fetch is not defined
              12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:1:1
              12:42:52.239 error javascript.0 (166690) at script.js.Projektor_2:14:3

              Ich habe das Gefühl ich sei schon nah dran, aber mir fehlen halt die Basics... kannst du mir nochmals einen Tipp geben?

              OliverIOO Offline
              OliverIOO Offline
              OliverIO
              schrieb am zuletzt editiert von OliverIO
              #6

              @romn

              Also das sind 2 unterschiedliche requests
              Das was als payload ausgewiesen wird müsste bei fetch also body ausgegeben werden.

              Auch gibt es diskrepanzen zwischen payload und preview.
              Payload müsste eine cklickbare objektstruktur der inhalte von preview sein (ist ja json)

              Hast du den die Bibliothek node-fetch im JavaScript Adapter installiert?
              Einfach den Namen bei zusätzliche npm Pakete hinzufügen. Dann kennt er auch den Befehl fetch.
              Am Anfang des Skripts muss man mit require noch die Bibliothek in das Skript importieren. Wie findest du in der Dokumentation von Node-fetch

              Meine Adapter und Widgets
              TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
              Links im Profil

              R 2 Antworten Letzte Antwort
              0
              • OliverIOO OliverIO

                @romn

                Also das sind 2 unterschiedliche requests
                Das was als payload ausgewiesen wird müsste bei fetch also body ausgegeben werden.

                Auch gibt es diskrepanzen zwischen payload und preview.
                Payload müsste eine cklickbare objektstruktur der inhalte von preview sein (ist ja json)

                Hast du den die Bibliothek node-fetch im JavaScript Adapter installiert?
                Einfach den Namen bei zusätzliche npm Pakete hinzufügen. Dann kennt er auch den Befehl fetch.
                Am Anfang des Skripts muss man mit require noch die Bibliothek in das Skript importieren. Wie findest du in der Dokumentation von Node-fetch

                R Offline
                R Offline
                RomN
                schrieb am zuletzt editiert von RomN
                #7

                @oliverio

                a4fd7ee1-94f5-4285-8796-9b0597b96732-image.png

                Hätte ich gemeint dass ich node-fetch richtig installiert habe

                Edit: Wenn ich einbinde kommt eine neue Fehlermeldung:

                const fetch = require('node-fetch');
                fetch("http://192.168.1.100/form/control_cgi", {
                  "headers": {
                    "accept": "*/*",
                    "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                    "content-type": "application/x-www-form-urlencoded"
                  },
                  "referrer": "http://192.168.1.100/control.asp",
                  "referrerPolicy": "strict-origin-when-cross-origin",
                  "body": "SendQueryBatchCDM=SendQueryBatchCDM",
                  "method": "POST",
                  "mode": "cors",
                  "credentials": "include"
                });
                

                13:47:21.547 error javascript.0 (167677) script.js.Projektor_2: Error [ERR_REQUIRE_ESM]: require() of ES Module /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-fetch/src/index.js from /opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js not supported.
                13:47:21.547 info javascript.0 (167677) script.js.Projektor_2: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                13:47:21.549 error javascript.0 (167677) script.js.Projektor_2: TypeError: fetch is not a function
                13:47:21.549 error javascript.0 (167677) at script.js.Projektor_2:2:1
                13:47:21.549 error javascript.0 (167677) at script.js.Projektor_2:15:3

                Ich habe nun noch probiert über die Browsererweiterung den Befehl abzuschicken, weil ich schonmal sowas gebraucht habe für ein OTA Update... Rester gibt mir die Response 200 OK aber es passiert nichts

                bdce33f0-4beb-4a30-9dd5-36ac1d9918d6-image.png

                1 Antwort Letzte Antwort
                0
                • OliverIOO OliverIO

                  @romn

                  Also das sind 2 unterschiedliche requests
                  Das was als payload ausgewiesen wird müsste bei fetch also body ausgegeben werden.

                  Auch gibt es diskrepanzen zwischen payload und preview.
                  Payload müsste eine cklickbare objektstruktur der inhalte von preview sein (ist ja json)

                  Hast du den die Bibliothek node-fetch im JavaScript Adapter installiert?
                  Einfach den Namen bei zusätzliche npm Pakete hinzufügen. Dann kennt er auch den Befehl fetch.
                  Am Anfang des Skripts muss man mit require noch die Bibliothek in das Skript importieren. Wie findest du in der Dokumentation von Node-fetch

                  R Offline
                  R Offline
                  RomN
                  schrieb am zuletzt editiert von RomN
                  #8

                  @oliverio

                  Ok node-fetch läuft jetzt um es mit Requiere einzubinden muss man node-fetch@2 zum adapter hinzufügen

                  Das mit dem Body hab ich nun auch hingekriegt, es scheint als ob ich ein Copy Fehler gemacht habe

                  fetch("http://192.168.1.100/form/control_cgi", {
                    "headers": {
                      "accept": "*/*",
                      "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                      "content-type": "application/x-www-form-urlencoded"
                    },
                    "referrer": "http://192.168.1.100/control.asp",
                    "referrerPolicy": "strict-origin-when-cross-origin",
                    "body": "pwr=pwr",
                    "method": "POST",
                    "mode": "cors",
                    "credentials": "include"
                  });
                  

                  So siehgt die richtige Copy aus für die nachwelt :dog:
                  Vielen Dank jetzt muss ich nur noch dieses Skript mit dem Blockly verbinden, aber da probiere ich nun ein bisschen selbst

                  OliverIOO 1 Antwort Letzte Antwort
                  0
                  • R RomN

                    @oliverio

                    Ok node-fetch läuft jetzt um es mit Requiere einzubinden muss man node-fetch@2 zum adapter hinzufügen

                    Das mit dem Body hab ich nun auch hingekriegt, es scheint als ob ich ein Copy Fehler gemacht habe

                    fetch("http://192.168.1.100/form/control_cgi", {
                      "headers": {
                        "accept": "*/*",
                        "accept-language": "de-CH,de-DE;q=0.9,de;q=0.8,en-US;q=0.7,en;q=0.6,uk;q=0.5",
                        "content-type": "application/x-www-form-urlencoded"
                      },
                      "referrer": "http://192.168.1.100/control.asp",
                      "referrerPolicy": "strict-origin-when-cross-origin",
                      "body": "pwr=pwr",
                      "method": "POST",
                      "mode": "cors",
                      "credentials": "include"
                    });
                    

                    So siehgt die richtige Copy aus für die nachwelt :dog:
                    Vielen Dank jetzt muss ich nur noch dieses Skript mit dem Blockly verbinden, aber da probiere ich nun ein bisschen selbst

                    OliverIOO Offline
                    OliverIOO Offline
                    OliverIO
                    schrieb am zuletzt editiert von OliverIO
                    #9

                    @romn
                    Und das klappt?
                    Das steht was von credentials?
                    Muss man sich gegenüber dem Gerät nicht authentifizieren?
                    Auch die refererpolicy könnte noch Probleme machen

                    Meine Adapter und Widgets
                    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                    Links im Profil

                    1 Antwort Letzte Antwort
                    0
                    • R Offline
                      R Offline
                      RomN
                      schrieb am zuletzt editiert von RomN
                      #10

                      @oliverio

                      Ja läuft genau so wie ich das eigentlich möchte...

                      Die Frage ist dann wohl wie lange, das mit den Credentials ist wirklich ein bisschen komisch

                      Aber bis jetzt konnte ich nichts provozieren dass es nicht lief...

                      OliverIOO 1 Antwort Letzte Antwort
                      0
                      • R RomN

                        @oliverio

                        Ja läuft genau so wie ich das eigentlich möchte...

                        Die Frage ist dann wohl wie lange, das mit den Credentials ist wirklich ein bisschen komisch

                        Aber bis jetzt konnte ich nichts provozieren dass es nicht lief...

                        OliverIOO Offline
                        OliverIOO Offline
                        OliverIO
                        schrieb am zuletzt editiert von
                        #11

                        @romn

                        ne dann ist gut.
                        iobroker ist für den webserver wieder ein anderes gerät wie der browser

                        Meine Adapter und Widgets
                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                        Links im Profil

                        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

                        418

                        Online

                        32.5k

                        Benutzer

                        81.7k

                        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