Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Huawei Sun2000 & ioBroker via JS script funktioniert

NEWS

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

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

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

Huawei Sun2000 & ioBroker via JS script funktioniert

Scheduled Pinned Locked Moved ioBroker Allgemein
481 Posts 62 Posters 120.9k Views 63 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B bishop

    Hab da mal noch eine Doofe frage!
    Was ist jetzt sinnvoller, dieses Script zu verwenden oder

    https://github.com/daolis/ioBroker.sun2000-modbus
    

    den Adapter?

    bahnuhrB Online
    bahnuhrB Online
    bahnuhr
    Forum Testing Most Active
    wrote on last edited by
    #421

    @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

    https://github.com/daolis/ioBroker.sun2000-modbus

    Mit 2 Wechselrichtern klappt der neue Adapter nicht.

    habe 2 Instanzen angelegt und verschiedene ID eingegeben.
    Instanzen wurde grün; aber die 1 Instanz hat nicht aktualisiert.


    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
    Danke.
    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
    ScreenToGif :https://www.screentogif.com/downloads.html

    1 Reply Last reply
    0
    • B bishop

      Hab da mal noch eine Doofe frage!
      Was ist jetzt sinnvoller, dieses Script zu verwenden oder

      https://github.com/daolis/ioBroker.sun2000-modbus
      

      den Adapter?

      R Offline
      R Offline
      R4
      wrote on last edited by R4
      #422

      @bishop
      Probier's aus.
      Als ich angefangen hab gab es das noch nicht. Das Script habe ich inzwischen um ein paar Sachen erweitert, die nichts mit PV zu tun haben, und ist bei mir nun die "zentrale" HA-Lösung (mache nicht viel, das bisschen Programmieren ist für mich leicht).

      1 Reply Last reply
      0
      • B Offline
        B Offline
        bishop
        wrote on last edited by
        #423

        besten Dank euch beiden 🙂

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dragst3r
          wrote on last edited by dragst3r
          #424

          Hier stand Mist. Sorry!

          bahnuhrB 1 Reply Last reply
          0
          • D dragst3r

            Hier stand Mist. Sorry!

            bahnuhrB Online
            bahnuhrB Online
            bahnuhr
            Forum Testing Most Active
            wrote on last edited by
            #425

            @dragst3r

            was ist frigate ?
            war ist camx ?

            Bist du im richtigen thread ?


            Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
            Danke.
            gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
            ScreenToGif :https://www.screentogif.com/downloads.html

            D 1 Reply Last reply
            0
            • bahnuhrB bahnuhr

              @dragst3r

              was ist frigate ?
              war ist camx ?

              Bist du im richtigen thread ?

              D Offline
              D Offline
              dragst3r
              wrote on last edited by
              #426

              @bahnuhr
              OMG, sorry. Ich hatte nach dem Login ein 503 fehler und bin daher zum falschen Thread gekommen. Beitrag bitte löschen wenn es geht.

              bahnuhrB 1 Reply Last reply
              0
              • D dragst3r

                @bahnuhr
                OMG, sorry. Ich hatte nach dem Login ein 503 fehler und bin daher zum falschen Thread gekommen. Beitrag bitte löschen wenn es geht.

                bahnuhrB Online
                bahnuhrB Online
                bahnuhr
                Forum Testing Most Active
                wrote on last edited by
                #427

                @dragst3r sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                Beitrag bitte löschen

                geht nicht.


                Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                Danke.
                gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                ScreenToGif :https://www.screentogif.com/downloads.html

                1 Reply Last reply
                0
                • B Offline
                  B Offline
                  bishop
                  wrote on last edited by bishop
                  #428

                  ich bin kein Script Experte aber ich benötige manche DP als bestätigt also
                  ack = true

                  habe das nun so gelöst

                  // perform createState() only if variable does not yet exist, and perform the check via existsState() only once for each processing round
                  {   if (testCreateState == 0)
                      {   if (!existsState(JavaInst + objectname)) { createState(objectname, value, options); }
                          else                                            { setState(objectname, value, true); }
                      } else
                      {   setState(objectname, value, true);
                      }
                  }  
                  

                  also nach dem value "wert" mache ich noch ein true.
                  Ist das so korrekt, kann man das so machen oder ist das falsch? Jetzt sind die ganzen Datenpunkte auch nicht mehr rot 🙂

                  bahnuhrB 1 Reply Last reply
                  0
                  • B bishop

                    ich bin kein Script Experte aber ich benötige manche DP als bestätigt also
                    ack = true

                    habe das nun so gelöst

                    // perform createState() only if variable does not yet exist, and perform the check via existsState() only once for each processing round
                    {   if (testCreateState == 0)
                        {   if (!existsState(JavaInst + objectname)) { createState(objectname, value, options); }
                            else                                            { setState(objectname, value, true); }
                        } else
                        {   setState(objectname, value, true);
                        }
                    }  
                    

                    also nach dem value "wert" mache ich noch ein true.
                    Ist das so korrekt, kann man das so machen oder ist das falsch? Jetzt sind die ganzen Datenpunkte auch nicht mehr rot 🙂

                    bahnuhrB Online
                    bahnuhrB Online
                    bahnuhr
                    Forum Testing Most Active
                    wrote on last edited by
                    #429

                    @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                    benötige manche DP als bestätigt also
                    ack = true

                    Bitte mal Rückinfo warum man dies braucht ?


                    Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                    Danke.
                    gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                    ScreenToGif :https://www.screentogif.com/downloads.html

                    B 2 Replies Last reply
                    0
                    • bahnuhrB bahnuhr

                      @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                      benötige manche DP als bestätigt also
                      ack = true

                      Bitte mal Rückinfo warum man dies braucht ?

                      B Offline
                      B Offline
                      bishop
                      wrote on last edited by bishop
                      #430

                      @bahnuhr

                      z.b. bei dem awtrix-light Adapter werden die Werte an der Uhr nicht aktualisiert wenn sie nicht bestätigt sind.
                      Und die rote Farbe mag ich nicht 🙂

                      bahnuhrB 1 Reply Last reply
                      0
                      • B bishop

                        @bahnuhr

                        z.b. bei dem awtrix-light Adapter werden die Werte an der Uhr nicht aktualisiert wenn sie nicht bestätigt sind.
                        Und die rote Farbe mag ich nicht 🙂

                        bahnuhrB Online
                        bahnuhrB Online
                        bahnuhr
                        Forum Testing Most Active
                        wrote on last edited by
                        #431

                        @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                        awtrix-light Adapter

                        kenn ich nicht.

                        @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                        Und die Rote Farbe mag ich nicht

                        Hat mich noch nie gestört.
                        Und hat bisher auch alles mit "roter Farbe" geklappt.

                        Aber ja, bei Aktoren z.B. Homematic ist es schon wichtig dass der Wert auch bestätigt wird.
                        Aber bei Daten vom Huawei Wechselrichter ?!


                        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                        Danke.
                        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                        ScreenToGif :https://www.screentogif.com/downloads.html

                        B 1 Reply Last reply
                        0
                        • bahnuhrB bahnuhr

                          @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                          awtrix-light Adapter

                          kenn ich nicht.

                          @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                          Und die Rote Farbe mag ich nicht

                          Hat mich noch nie gestört.
                          Und hat bisher auch alles mit "roter Farbe" geklappt.

                          Aber ja, bei Aktoren z.B. Homematic ist es schon wichtig dass der Wert auch bestätigt wird.
                          Aber bei Daten vom Huawei Wechselrichter ?!

                          B Offline
                          B Offline
                          bishop
                          wrote on last edited by
                          #432

                          @bahnuhr
                          muss ja nicht geändert werden. Finde es halt somit abgeschlossen.

                          1 Reply Last reply
                          0
                          • B Offline
                            B Offline
                            bishop
                            wrote on last edited by
                            #433

                            @Chris_B
                            ist es evtl. möglich das Script um ein paar Infos zu erweitern?
                            Ich habe die Datenpunkte bei z.b.

                            {
                              "common": {
                                "name": "Solarpower.Huawei.Inverter.1.Battery.RunningStatus",
                                "unit": "",
                                "role": "state",
                                "type": "mixed",
                                "states": {
                                  "0": "offline",
                                  "1": "stand by",
                                  "2": "running",
                                  "3": "fault",
                                  "4": "sleep mode"
                                }
                              },
                            

                            oder

                            {
                              "common": {
                                "name": "Solarpower.Huawei.Meter.Status",
                                "unit": "",
                                "role": "state",
                                "type": "mixed",
                                "states": {
                                  "0": "offline",
                                  "1": "normal"
                                }
                              },
                            

                            erweitert da ich nur mit der Zahl nichts anfangen kann.
                            Ist es möglich das in deinem Script zu integrieren?

                            C 1 Reply Last reply
                            0
                            • bahnuhrB bahnuhr

                              @bishop sagte in Huawei Sun2000 & ioBroker via JS script funktioniert:

                              benötige manche DP als bestätigt also
                              ack = true

                              Bitte mal Rückinfo warum man dies braucht ?

                              B Offline
                              B Offline
                              bishop
                              wrote on last edited by
                              #434

                              @bahnuhr
                              hier z.b.

                              
                              awtrix-light.0
                              2023-10-31 19:25:50.383	info	[initCustomApps] State value of custom app "verbrauch" (javascript.0.Solarpower.Derived.HouseConsumption) is not acknowledged (ack: false) - waiting for new value
                              

                              brauch ich den Wert als bestätigt!

                              bahnuhrB 1 Reply Last reply
                              0
                              • B bishop

                                @bahnuhr
                                hier z.b.

                                
                                awtrix-light.0
                                2023-10-31 19:25:50.383	info	[initCustomApps] State value of custom app "verbrauch" (javascript.0.Solarpower.Derived.HouseConsumption) is not acknowledged (ack: false) - waiting for new value
                                

                                brauch ich den Wert als bestätigt!

                                bahnuhrB Online
                                bahnuhrB Online
                                bahnuhr
                                Forum Testing Most Active
                                wrote on last edited by
                                #435

                                @bishop
                                Is ja nen Ding.
                                Hab ich noch nicht gesehen sowas.

                                Klappt dein kleines Script wie gewollt ?


                                Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                                Danke.
                                gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                                ScreenToGif :https://www.screentogif.com/downloads.html

                                1 Reply Last reply
                                0
                                • B bishop

                                  @Chris_B
                                  ist es evtl. möglich das Script um ein paar Infos zu erweitern?
                                  Ich habe die Datenpunkte bei z.b.

                                  {
                                    "common": {
                                      "name": "Solarpower.Huawei.Inverter.1.Battery.RunningStatus",
                                      "unit": "",
                                      "role": "state",
                                      "type": "mixed",
                                      "states": {
                                        "0": "offline",
                                        "1": "stand by",
                                        "2": "running",
                                        "3": "fault",
                                        "4": "sleep mode"
                                      }
                                    },
                                  

                                  oder

                                  {
                                    "common": {
                                      "name": "Solarpower.Huawei.Meter.Status",
                                      "unit": "",
                                      "role": "state",
                                      "type": "mixed",
                                      "states": {
                                        "0": "offline",
                                        "1": "normal"
                                      }
                                    },
                                  

                                  erweitert da ich nur mit der Zahl nichts anfangen kann.
                                  Ist es möglich das in deinem Script zu integrieren?

                                  C Offline
                                  C Offline
                                  Chris_B
                                  wrote on last edited by
                                  #436

                                  @bishop Danke für die Frage.
                                  ich habe mich sehr lange nicht gemeldet. Ich habe genau das, und noch etwas mehr umgesetzt. Die Status von Inverter und Battery werden als Text ausgegeben. Zusätzlich werden gewisse Variable, welche im Standby der Battery nicht mehr zur Verfügung stehen entsprechend gesetzt, sodass diese dann in den Status 'standby' wechseln. Ich konnte das erst jetzt gut testen, da meine Anlage erst jetzt regelmässig in diesen Modus wechselt.
                                  Ich werde das so erweiterte Skript am Wochenende zur Verfügung stellen. Ich aknn nicht früher, zu viel zu tun...

                                  B 1 Reply Last reply
                                  0
                                  • C Chris_B

                                    @bishop Danke für die Frage.
                                    ich habe mich sehr lange nicht gemeldet. Ich habe genau das, und noch etwas mehr umgesetzt. Die Status von Inverter und Battery werden als Text ausgegeben. Zusätzlich werden gewisse Variable, welche im Standby der Battery nicht mehr zur Verfügung stehen entsprechend gesetzt, sodass diese dann in den Status 'standby' wechseln. Ich konnte das erst jetzt gut testen, da meine Anlage erst jetzt regelmässig in diesen Modus wechselt.
                                    Ich werde das so erweiterte Skript am Wochenende zur Verfügung stellen. Ich aknn nicht früher, zu viel zu tun...

                                    B Offline
                                    B Offline
                                    bishop
                                    wrote on last edited by
                                    #437

                                    @chris_b
                                    Das hört sich doch super an! Kein Stress ich kann warten 🙂

                                    C 1 Reply Last reply
                                    0
                                    • B Online
                                      B Online
                                      bolliy
                                      Developer
                                      wrote on last edited by bolliy
                                      #438

                                      Hallo Zusammen, ich habe mein Huawai Wechselrichter dank des JS script von @chrisB gut im Griff. Nun ist mir allerdings aufgefallen, dass die Funktion/Methode "readHoldingRegisters" mit einem Callback aufgerufen wird. Der Callback führt zu einem asynchronem Programmablauf. Deshalb muss die Abfrage der Register zeitverzögert erfolgen, da die die Modbus-Schnittstelle nur seriell angsprochen werden kann. Es kann also die nächste Abfrage erst nach dem Modbus-Response erfolgen.

                                      Die Funktion readHoldingRegisters gibt aber auch ein Promise zurück - also ein Versprechen auf einen Wert, der später kommt.
                                      Die Lösung: async/await! Unter der Haube arbeitet ein Promise, aber wir werden von den ganzen Unannehmlichkeiten befreit. Nun habe ich die Funkion "readRegisterSpace" umgebaut. Der Programmablauf ist nun synchron. Der Aufruf "await client.readHoldingRegisters" wartet bis das Ergebnis vorliegt ohne zu blockieren!

                                      async function readRegisterSpaceAsync(id, address, length) {  
                                          try {
                                            //console.log('ReadRegisters 1');  
                                            await client.setID(ModBusIDs[id-1]);
                                            //console.log('ReadRegisters 1');
                                            let data = await client.readHoldingRegisters(address, length);
                                            //console.log('ReadRegisters 2');
                                            return data.data;    
                                          } catch (err) {
                                             //console.error("Error received writing adress "+ address + " from id: " +  ModBusIDs[id-1] + " with error: " + modbusErrorMessages[err.modbusCode], err);
                                             //return -1;
                                             throw err; //Fehler weiterreichen
                                          }
                                          
                                      }
                                      

                                      Mein readRegisters kann nun als synchroner Programmablauf - recht schnell - die Register auslesen.

                                      async function ReadRegister(Reg) {
                                          for (let id = 1; id <= ModBusIDs.length; id++) {
                                              for (let i = 0; i < Reg.length; i++) {
                                                  let address = Reg[i][0];
                                                  let length = Reg[i][1];
                                                  try { 
                                                    console.debug("Try to read data from id/address " + ModBusIDs[id-1] + "/" + address);
                                                    let data = await readRegisterSpaceAsync(id, address, length);
                                                    console.debug("Read data from id/address " + ModBusIDs[id-1] + "/" + address + "\nData is: " + data);
                                                    for (var y = 0; y < length; y++) Buffer[id-1][address + y - BufOffset] = data[y]; 
                                                  } catch(err) {
                                                      // if error, handle them here (it should not)
                                                      if (err.modbusCode == null) {
                                                        console.warn("Lost connection to client. ");
                                                      }  else { 
                                                        console.error("Error received writing adress "+ address + " from id: " +  ModBusIDs[id-1] + " with error: " + modbusErrorMessages[err.modbusCode], err);
                                                      }  
                                                      return -1;           
                                                  } 
                                                 
                                              }      
                                          }     
                                      
                                      }
                                      

                                      Hier eine gute Erklärung zum Thema asynchroner Code: link text

                                      Lg Stephan

                                      C 2 Replies Last reply
                                      1
                                      • B bolliy

                                        Hallo Zusammen, ich habe mein Huawai Wechselrichter dank des JS script von @chrisB gut im Griff. Nun ist mir allerdings aufgefallen, dass die Funktion/Methode "readHoldingRegisters" mit einem Callback aufgerufen wird. Der Callback führt zu einem asynchronem Programmablauf. Deshalb muss die Abfrage der Register zeitverzögert erfolgen, da die die Modbus-Schnittstelle nur seriell angsprochen werden kann. Es kann also die nächste Abfrage erst nach dem Modbus-Response erfolgen.

                                        Die Funktion readHoldingRegisters gibt aber auch ein Promise zurück - also ein Versprechen auf einen Wert, der später kommt.
                                        Die Lösung: async/await! Unter der Haube arbeitet ein Promise, aber wir werden von den ganzen Unannehmlichkeiten befreit. Nun habe ich die Funkion "readRegisterSpace" umgebaut. Der Programmablauf ist nun synchron. Der Aufruf "await client.readHoldingRegisters" wartet bis das Ergebnis vorliegt ohne zu blockieren!

                                        async function readRegisterSpaceAsync(id, address, length) {  
                                            try {
                                              //console.log('ReadRegisters 1');  
                                              await client.setID(ModBusIDs[id-1]);
                                              //console.log('ReadRegisters 1');
                                              let data = await client.readHoldingRegisters(address, length);
                                              //console.log('ReadRegisters 2');
                                              return data.data;    
                                            } catch (err) {
                                               //console.error("Error received writing adress "+ address + " from id: " +  ModBusIDs[id-1] + " with error: " + modbusErrorMessages[err.modbusCode], err);
                                               //return -1;
                                               throw err; //Fehler weiterreichen
                                            }
                                            
                                        }
                                        

                                        Mein readRegisters kann nun als synchroner Programmablauf - recht schnell - die Register auslesen.

                                        async function ReadRegister(Reg) {
                                            for (let id = 1; id <= ModBusIDs.length; id++) {
                                                for (let i = 0; i < Reg.length; i++) {
                                                    let address = Reg[i][0];
                                                    let length = Reg[i][1];
                                                    try { 
                                                      console.debug("Try to read data from id/address " + ModBusIDs[id-1] + "/" + address);
                                                      let data = await readRegisterSpaceAsync(id, address, length);
                                                      console.debug("Read data from id/address " + ModBusIDs[id-1] + "/" + address + "\nData is: " + data);
                                                      for (var y = 0; y < length; y++) Buffer[id-1][address + y - BufOffset] = data[y]; 
                                                    } catch(err) {
                                                        // if error, handle them here (it should not)
                                                        if (err.modbusCode == null) {
                                                          console.warn("Lost connection to client. ");
                                                        }  else { 
                                                          console.error("Error received writing adress "+ address + " from id: " +  ModBusIDs[id-1] + " with error: " + modbusErrorMessages[err.modbusCode], err);
                                                        }  
                                                        return -1;           
                                                    } 
                                                   
                                                }      
                                            }     
                                        
                                        }
                                        

                                        Hier eine gute Erklärung zum Thema asynchroner Code: link text

                                        Lg Stephan

                                        C Offline
                                        C Offline
                                        Chris_B
                                        wrote on last edited by
                                        #439

                                        @bolliy INteressanter Input. Muss ich mir anschauen. Ich veröffentliche gleich eine neue Version des Skripts (endlich, nach längerer Abwesenheit). Diese Version übersetzt nun Meldungen in verständliche Strings (bspw. den Zustand des Inverters). Deine Überlegungen sind allerdings da noch nicht eingebaut. Schau ich mir noch an und baue das ein - sofern ich es verstehe...
                                        Gruss

                                        1 Reply Last reply
                                        0
                                        • B bishop

                                          @chris_b
                                          Das hört sich doch super an! Kein Stress ich kann warten 🙂

                                          C Offline
                                          C Offline
                                          Chris_B
                                          wrote on last edited by
                                          #440

                                          @bishop Hallo zusammen. Nach längerer Abwesenheit endlich eine neue Version des Skripts. Das beinhaltet (endlich) einen Übersetzung von vielen Zuständen in lesbaren Text. So ist bspw. der Inverterzustand jetz nicht mehr eine Zahl, sondern ein lesbarer Text, bspw. "On-grid" oder "Standby: no irradiation". Das gleiche ist für die Batterie- und die Batterystack Zustände umgesetzt.

                                          Der Kommentar von @bolliy habe ich noch nicht umgesetzt, schaue ich mir noch an.

                                          Das Ganze findet sich, inklusive erweiterter Beschreibung auf Github:
                                          Github Sun2000
                                          Gruss, Christian

                                          B 1 Reply Last reply
                                          3
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          769

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe