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

  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [Tipp] In HTML-Widget States verarbeiten/anzeigen

NEWS

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

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

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

[Tipp] In HTML-Widget States verarbeiten/anzeigen

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vissocket io
14 Beiträge 5 Kommentatoren 3.5k Aufrufe 12 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.
  • MicM Offline
    MicM Offline
    Mic
    Developer
    schrieb am zuletzt editiert von Mic
    #1

    Hi,

    ich hatte mir einen Wolf gesucht hier im Forum und nun die Lösung.

    Ich wollte im VIS anzeigen, ob ein Script regelmäßig einen Datenpunkt updated (in meinem Fall mein Log-Script).
    Also: Falls Datenpunkt 0_userdata.0.Log-Script.All.lastTimeUpdated in den letzten 30 Sekunden aktualisiert wurde, dann:
    1_active.png

    Falls keine Aktualisierung innerhalb 30 Sekunden, dann:
    2_inactive.png

    Hier der Code für das HTML-Widget:

    Script is <span id="logScriptUpdateCheck"></span>.
    <script>
        // Siehe https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/
        let objID = '0_userdata.0.Log-Script.All.lastTimeUpdated';
        servConn.getStates(objID, (error, states) => {
            let stateValue = states[objID].val;
            let result;
            if( (parseInt(stateValue)+30000) > Date.now() ) {
                result = '<span style="color:#4fa16c">active</span>'
            } else {
                result = '<span style="color:#ff0000">inactive</span>'
            }
            document.getElementById('logScriptUpdateCheck').innerHTML = result;
        });
    </script>
    

    Widget-Export (enthält bereits den Code):

    [{"tpl":"tplHtml","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"30000","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Script is <span id=\"logScriptUpdateCheck\"></span>.\n<script>\n    // Siehe https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/\n    let objID = '0_userdata.0..Log-Script.All.lastTimeUpdated';\n    servConn.getStates(objID, (error, states) => {\n        let stateValue = states[objID].val;\n        let result;\n        if( (parseInt(stateValue)+30000) > Date.now() ) {\n            result = '<span style=\"color:#4fa16c\">active</span>'\n        } else {\n            result = '<span style=\"color:#ff0000\">inactive</span>'\n        }\n        document.getElementById('logScriptUpdateCheck').innerHTML = result;\n    });\n</script>","name":"txtScriptStatus","locked":false},"style":{"left":"30px","top":"622px","width":"171px","height":"22px","font-family":"Jura-DemiBold","color":"#8f8f8f","text-align":"left","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"14px","z-index":"100"},"widgetSet":"basic"}]
    

    Dies nur als ein Beispiel.
    Entscheidende Info von hier: https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/


    Keywords für Forumsuche (Tags sind limitiert hier, warum auch immer): getState() setState() vis.setValue vis.getValue

    sigi234S 1 Antwort Letzte Antwort
    3
    • MicM Mic

      Hi,

      ich hatte mir einen Wolf gesucht hier im Forum und nun die Lösung.

      Ich wollte im VIS anzeigen, ob ein Script regelmäßig einen Datenpunkt updated (in meinem Fall mein Log-Script).
      Also: Falls Datenpunkt 0_userdata.0.Log-Script.All.lastTimeUpdated in den letzten 30 Sekunden aktualisiert wurde, dann:
      1_active.png

      Falls keine Aktualisierung innerhalb 30 Sekunden, dann:
      2_inactive.png

      Hier der Code für das HTML-Widget:

      Script is <span id="logScriptUpdateCheck"></span>.
      <script>
          // Siehe https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/
          let objID = '0_userdata.0.Log-Script.All.lastTimeUpdated';
          servConn.getStates(objID, (error, states) => {
              let stateValue = states[objID].val;
              let result;
              if( (parseInt(stateValue)+30000) > Date.now() ) {
                  result = '<span style="color:#4fa16c">active</span>'
              } else {
                  result = '<span style="color:#ff0000">inactive</span>'
              }
              document.getElementById('logScriptUpdateCheck').innerHTML = result;
          });
      </script>
      

      Widget-Export (enthält bereits den Code):

      [{"tpl":"tplHtml","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"30000","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Script is <span id=\"logScriptUpdateCheck\"></span>.\n<script>\n    // Siehe https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/\n    let objID = '0_userdata.0..Log-Script.All.lastTimeUpdated';\n    servConn.getStates(objID, (error, states) => {\n        let stateValue = states[objID].val;\n        let result;\n        if( (parseInt(stateValue)+30000) > Date.now() ) {\n            result = '<span style=\"color:#4fa16c\">active</span>'\n        } else {\n            result = '<span style=\"color:#ff0000\">inactive</span>'\n        }\n        document.getElementById('logScriptUpdateCheck').innerHTML = result;\n    });\n</script>","name":"txtScriptStatus","locked":false},"style":{"left":"30px","top":"622px","width":"171px","height":"22px","font-family":"Jura-DemiBold","color":"#8f8f8f","text-align":"left","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"14px","z-index":"100"},"widgetSet":"basic"}]
      

      Dies nur als ein Beispiel.
      Entscheidende Info von hier: https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/


      Keywords für Forumsuche (Tags sind limitiert hier, warum auch immer): getState() setState() vis.setValue vis.getValue

      sigi234S Online
      sigi234S Online
      sigi234
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #2

      @Mic

      Da kommt nicht viel?

      Screenshot (1818).png

      Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
      Immer Daten sichern!

      MicM 1 Antwort Letzte Antwort
      0
      • sigi234S sigi234

        @Mic

        Da kommt nicht viel?

        Screenshot (1818).png

        MicM Offline
        MicM Offline
        Mic
        Developer
        schrieb am zuletzt editiert von Mic
        #3

        @sigi234
        Hab oben auf den "Standard-Pfad" '0_userdata.0.Log-Script.All.lastTimeUpdated' geändert, damit sollte es gehen. Vorher stand da '0_userdata.0.System.Log-Script.All.lastTimeUpdated'
        Hier übrigens auch gepostet: https://forum.iobroker.net/post/384066

        1 Antwort Letzte Antwort
        0
        • MicM Offline
          MicM Offline
          Mic
          Developer
          schrieb am zuletzt editiert von
          #4

          Damit öffnet man sich auch andere schöne Spielereien, ohne zusätzlicher Datenpunkte.
          Z.B. Ausgabe eines Datums von einem State in "Heute, um 20:15 Uhr" anstatt "25.02.2020, um 20:15 Uhr" usw.
          Man kann also mittels JavaScript die State-Daten entsprechend verarbeiten und zur Anzeige bringen, gerade wenn es dafür noch keine Widgets gibt oder diese Optionen nicht bieten.

          G GlasfaserG F 3 Antworten Letzte Antwort
          0
          • MicM Mic

            Damit öffnet man sich auch andere schöne Spielereien, ohne zusätzlicher Datenpunkte.
            Z.B. Ausgabe eines Datums von einem State in "Heute, um 20:15 Uhr" anstatt "25.02.2020, um 20:15 Uhr" usw.
            Man kann also mittels JavaScript die State-Daten entsprechend verarbeiten und zur Anzeige bringen, gerade wenn es dafür noch keine Widgets gibt oder diese Optionen nicht bieten.

            G Offline
            G Offline
            GiuseppeS
            schrieb am zuletzt editiert von
            #5

            @Mic
            Hinweis:
            Apollon77 hatte in deinem verlinkten Thread folgendes gepostet:

            getState liefert den Wert des States. GetObject liefert das Objekt. Und bei getState ist es state.val (wenn state die Variable des response callbacks ist)

            Du benutzt in deinem Beispiel oben getStates und greifst im Nachgang auf das eigentliche Objekt des json mit [objID] zu. Dürfte einfacher sein, wenn getState genutzt wird. Habe es selbst nie getestet, da ich nie states auslese.

            MicM 1 Antwort Letzte Antwort
            0
            • MicM Mic

              Damit öffnet man sich auch andere schöne Spielereien, ohne zusätzlicher Datenpunkte.
              Z.B. Ausgabe eines Datums von einem State in "Heute, um 20:15 Uhr" anstatt "25.02.2020, um 20:15 Uhr" usw.
              Man kann also mittels JavaScript die State-Daten entsprechend verarbeiten und zur Anzeige bringen, gerade wenn es dafür noch keine Widgets gibt oder diese Optionen nicht bieten.

              GlasfaserG Offline
              GlasfaserG Offline
              Glasfaser
              schrieb am zuletzt editiert von Glasfaser
              #6

              @Mic

              Danke für die Idee .

              oder mit Emoji den Zustand anzeigen ...

              1.JPG

              2.JPG

              Script is <span id="logScriptUpdateCheck"></span>
              <script>
              // Siehe https://forum.iobroker.net/topic/29851/socket-io-state-lesen-und-setzen/
              let objID = '0_userdata.0.Log-Scriptalpha.All.lastTimeUpdated';
              servConn.getStates(objID, (error, states) => {
              let stateValue = states[objID].val;
              let result;
              if( (parseInt(stateValue)+30000) > Date.now() ) {
              result = '<span >✅</span>'
              } else {
              result = '<span >❌</span>'
              }
              document.getElementById('logScriptUpdateCheck').innerHTML = result;
              });
              </script>
              
              

              Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

              1 Antwort Letzte Antwort
              0
              • G GiuseppeS

                @Mic
                Hinweis:
                Apollon77 hatte in deinem verlinkten Thread folgendes gepostet:

                getState liefert den Wert des States. GetObject liefert das Objekt. Und bei getState ist es state.val (wenn state die Variable des response callbacks ist)

                Du benutzt in deinem Beispiel oben getStates und greifst im Nachgang auf das eigentliche Objekt des json mit [objID] zu. Dürfte einfacher sein, wenn getState genutzt wird. Habe es selbst nie getestet, da ich nie states auslese.

                MicM Offline
                MicM Offline
                Mic
                Developer
                schrieb am zuletzt editiert von
                #7

                @GiuseppeS sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                @Mic
                Hinweis:
                Apollon77 hatte in deinem verlinkten Thread folgendes gepostet:

                getState liefert den Wert des States. GetObject liefert das Objekt. Und bei getState ist es state.val (wenn state die Variable des response callbacks ist)

                Du benutzt in deinem Beispiel oben getStates und greifst im Nachgang auf das eigentliche Objekt des json mit [objID] zu. Dürfte einfacher sein, wenn getState genutzt wird. Habe es selbst nie getestet, da ich nie states auslese.

                Danke für den Hinweis. Ich hatte kurz getState() getestet, aber hatte nicht funktioniert bei mir, daher blieb ich bei getObject.

                @Glasfaser sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                oder mit Emoji den Zustand anzeigen ...

                Auch schön.

                G 1 Antwort Letzte Antwort
                0
                • MicM Mic

                  @GiuseppeS sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                  @Mic
                  Hinweis:
                  Apollon77 hatte in deinem verlinkten Thread folgendes gepostet:

                  getState liefert den Wert des States. GetObject liefert das Objekt. Und bei getState ist es state.val (wenn state die Variable des response callbacks ist)

                  Du benutzt in deinem Beispiel oben getStates und greifst im Nachgang auf das eigentliche Objekt des json mit [objID] zu. Dürfte einfacher sein, wenn getState genutzt wird. Habe es selbst nie getestet, da ich nie states auslese.

                  Danke für den Hinweis. Ich hatte kurz getState() getestet, aber hatte nicht funktioniert bei mir, daher blieb ich bei getObject.

                  @Glasfaser sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                  oder mit Emoji den Zustand anzeigen ...

                  Auch schön.

                  G Offline
                  G Offline
                  GiuseppeS
                  schrieb am zuletzt editiert von
                  #8

                  @Mic
                  Vielleicht würde es so auch funktionieren...

                  servConn.getStates(objID, (error, states) => {
                          let stateValue = states[objID].val;
                  
                  // evtl so funktioniert es auch
                  
                  servConn.getState(objID, (error, state) => {
                          let stateValue = state.val;
                  
                  MicM 1 Antwort Letzte Antwort
                  0
                  • G GiuseppeS

                    @Mic
                    Vielleicht würde es so auch funktionieren...

                    servConn.getStates(objID, (error, states) => {
                            let stateValue = states[objID].val;
                    
                    // evtl so funktioniert es auch
                    
                    servConn.getState(objID, (error, state) => {
                            let stateValue = state.val;
                    
                    MicM Offline
                    MicM Offline
                    Mic
                    Developer
                    schrieb am zuletzt editiert von
                    #9

                    @GiuseppeS sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                    @Mic
                    Vielleicht würde es so auch funktionieren...

                    Geht leider nicht, Widget bleibt dann komplett leer.

                    GlasfaserG 1 Antwort Letzte Antwort
                    0
                    • MicM Mic

                      @GiuseppeS sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                      @Mic
                      Vielleicht würde es so auch funktionieren...

                      Geht leider nicht, Widget bleibt dann komplett leer.

                      GlasfaserG Offline
                      GlasfaserG Offline
                      Glasfaser
                      schrieb am zuletzt editiert von
                      #10

                      @Mic

                      Wollte nur mal erwähnen , habe mir letztens ein Wolf gesucht !

                      Hat ein Nachteil , sperrt die Funktion "View export" im Vis Editor .

                      Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                      MicM 1 Antwort Letzte Antwort
                      0
                      • GlasfaserG Glasfaser

                        @Mic

                        Wollte nur mal erwähnen , habe mir letztens ein Wolf gesucht !

                        Hat ein Nachteil , sperrt die Funktion "View export" im Vis Editor .

                        MicM Offline
                        MicM Offline
                        Mic
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        @Glasfaser sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                        Wollte nur mal erwähnen , habe mir letztens ein Wolf gesucht !

                        So gings mir auch :grinning:

                        Hat ein Nachteil , sperrt die Funktion "View export" im Vis Editor .

                        Grad getestet, das ist bei mir leider auch so. Du hast ja hier auch gepostet, wo ein Widget-JS die Export-Funktion sperrt: https://forum.iobroker.net/post/433242
                        Vielleicht machst du am besten im VIS-Adapter ein Issue auf? Danke.

                        GlasfaserG 1 Antwort Letzte Antwort
                        0
                        • MicM Mic

                          @Glasfaser sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                          Wollte nur mal erwähnen , habe mir letztens ein Wolf gesucht !

                          So gings mir auch :grinning:

                          Hat ein Nachteil , sperrt die Funktion "View export" im Vis Editor .

                          Grad getestet, das ist bei mir leider auch so. Du hast ja hier auch gepostet, wo ein Widget-JS die Export-Funktion sperrt: https://forum.iobroker.net/post/433242
                          Vielleicht machst du am besten im VIS-Adapter ein Issue auf? Danke.

                          GlasfaserG Offline
                          GlasfaserG Offline
                          Glasfaser
                          schrieb am zuletzt editiert von
                          #12

                          @Mic

                          Ist mir letztens aufgefallen , da ich mein View auf Logparser komplett umgestellt habe .

                          ( Ja ... ich habe es jetzt komplett umgestellt ;) )

                          Synology 918+ 16GB - ioBroker in Docker v9 , VISO auf Trekstor Primebook C13 13,3" , Hikvision Domkameras mit Surveillance Station .. CCU RaspberryMatic in Synology VM .. Zigbee CC2538+CC2592 .. Sonoff .. KNX .. Modbus ..

                          1 Antwort Letzte Antwort
                          1
                          • MicM Mic

                            Damit öffnet man sich auch andere schöne Spielereien, ohne zusätzlicher Datenpunkte.
                            Z.B. Ausgabe eines Datums von einem State in "Heute, um 20:15 Uhr" anstatt "25.02.2020, um 20:15 Uhr" usw.
                            Man kann also mittels JavaScript die State-Daten entsprechend verarbeiten und zur Anzeige bringen, gerade wenn es dafür noch keine Widgets gibt oder diese Optionen nicht bieten.

                            F Offline
                            F Offline
                            Förster
                            schrieb am zuletzt editiert von
                            #13

                            @Mic
                            Hallo Mic, könntest du erläutern, wie das mit dem Umwandeln in "heute, um 20:15 Uhr" funktioniert ?

                            Ich weiß, es passt nicht ganz zum eigentlichen Thema ... aber genau diese Funktion suche ich schon länger, habe aber bisher nichts dazu gefunden :-(

                            MicM 1 Antwort Letzte Antwort
                            0
                            • F Förster

                              @Mic
                              Hallo Mic, könntest du erläutern, wie das mit dem Umwandeln in "heute, um 20:15 Uhr" funktioniert ?

                              Ich weiß, es passt nicht ganz zum eigentlichen Thema ... aber genau diese Funktion suche ich schon länger, habe aber bisher nichts dazu gefunden :-(

                              MicM Offline
                              MicM Offline
                              Mic
                              Developer
                              schrieb am zuletzt editiert von
                              #14

                              @Förster sagte in [Tipp] In HTML-Widget States verarbeiten/anzeigen:

                              Ich weiß, es passt nicht ganz zum eigentlichen Thema ... aber genau diese Funktion suche ich schon länger, habe aber bisher nichts dazu gefunden

                              Passt nun wirklich gar nicht hier rein ;-) Daher nur kurze Antwort: Umsetzung kannst du dir im Adapter-Code ansehen:
                              https://github.com/Mic-M/ioBroker.logparser/blob/master/lib/mic-functions.js#L104
                              Zu weiteren Fragen machst du am besten separaten Thread auf mit genauer Beschreibung, Use Case, usw.

                              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

                              629

                              Online

                              32.4k

                              Benutzer

                              81.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