Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Tester
    4. Test Adapter Growatt v3.3.1

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Test Adapter Growatt v3.3.1

    This topic has been deleted. Only users with topic management privileges can see it.
    • fischi87
      fischi87 @PLCHome 0 last edited by

      @plchome-0

      bis jetzt hab ich noch nichts konfiguriert nur meine anmelde daten eingetragen. kannst mir sagen wie ich welche werte eintragen soll?

      1 Reply Last reply Reply Quote 0
      • M
        moonsorrox last edited by moonsorrox

        Es gibt hier im Forum irgendwo eine Anleitung, wie du dieses direkt bei Growatt auslesen kannst, wenn du dich bei denen einloggst. Ihc habe mir den gesichert, weil ich es auch nicht mehr weiß, suche mal ein wenig evtl. weiß jemand wo es steht..!

        In den Einstellungen habe ich alles angehakt und dann diese Werte eingetragen
        60, 600, true, 0, 30, 60

        Also nach dem Update kommen bei mir jetzt wieder die Daten rein, ich sehe es in meiner Fhem Sitzung genau.
        Nur eben mit dem Key gehts nicht.

        1 Reply Last reply Reply Quote 0
        • fischi87
          fischi87 @PLCHome 0 last edited by

          @plchome-0

          was mir auch auffällt, wenn ich meinen benutzer eingebe und mein passiert kann ich das nicht zusammen speichern. ich muss erst meinen benutzer eintragen, speichern und schließen dann wieder öffnen, passwort eingeben und speichern und schließen. wenn ich dann nochmal die einstellungen öffne, steht kein benutzer und kein passwort mehr drin?!

          PLCHome 0 1 Reply Last reply Reply Quote 0
          • PLCHome 0
            PLCHome 0 Developer @fischi87 last edited by

            @fischi87 Also wenn ich mir deinen Logauszug anschaue, hattest du eine Fehlkonfiguration, System hat im Millisekundenbereich versucht, daten abzurufen und diesen Abruf in Millisekunden abgebrochen. Dass passiert, wenn nicht die Defaultwerte in der Parametrierung stehen.
            Irgendwas ist mit deiner Installation kaputt. Der ioBroker zieht die Parameter bei der Installation oder beim Upload einer manuellinstallierten Komponente nach, wenn das nicht passiert, stimmt etwas nicht.
            Auch das mit dem Passwort kann nicht sein, das ist Standard, das habe ich nicht programmiert, sondern nur wie jede andere Komponente benutzt.
            Wie man an den Key kommt, ist in der readme beschreiben. Wann man die wieder öffnen kann, kann ich nicht sagen. Die readme wird von ioBroker.net abgerufen und übersetzt. Der ioBroker greift nicht auf meine Readme zu, die ist sei Sonntag korrigiert.

            On the Growatt website under energy, plant management, operating tools you can send yourself a key by e-mail.

            @moonsorrox ist dein Key abgelaufen? Versuche mal mit URL direkt: http://server.growatt.com/login/toSharePlant/<key>

            fischi87 3 Replies Last reply Reply Quote 0
            • fischi87
              fischi87 @PLCHome 0 last edited by

              @plchome-0 was wäre dein rat? neue installieren? hab seid heute nämlich das Problem das mein host aggeschmiert ist weil Zuviel abstürze in dem Adapter kamen. ja wie gesagt bei mir bleibt weder das password, user noch die werte die ich eingetragen habe bestehen.

              1 Reply Last reply Reply Quote 0
              • fischi87
                fischi87 @PLCHome 0 last edited by

                @plchome-0

                okay, alles uninstall und alles wieder neu installiert. läuft jetzt erstmal, key hab ich auch gefunden. danke!

                1 Reply Last reply Reply Quote 0
                • fischi87
                  fischi87 @PLCHome 0 last edited by

                  @plchome-0

                  heute ist es wieder passiert, keine Kommunikation mehr und meine login Daten und die anderen parameter sind alle verschwunden?!

                  1 Reply Last reply Reply Quote 0
                  • PLCHome 0
                    PLCHome 0 Developer last edited by

                    So, ich habe jetzt einiges am Adapter geändert. Ich hoffe, er läuft jett stabiler.

                    W 1 Reply Last reply Reply Quote 1
                    • W
                      Wildbill @PLCHome 0 last edited by

                      @plchome-0 Kannst Du mir sagen, wie ich an die geänderte Version komme? Auf Github finde ich nur die 1.1.8 mit Changlog-Datum vom 16.3. aber der letzten Änderung in den Dateien von vor 12 Tagen. Ich habe die 1.1.8 aber längst im iobroker, keine Ahnung seit wann, ist aber schon etwas her...

                      Gruss, Jürgen

                      PLCHome 0 1 Reply Last reply Reply Quote 0
                      • chucky666
                        chucky666 @PLCHome 0 last edited by

                        @plchome-0
                        Danke für den Adapter , bis jetzt läuft er super

                        gibt es irgendwo eine erklärung für die ganzen Datenpunkte ?

                        wie bekommt man eine erwartungskurve hin ?

                        PLCHome 0 2 Replies Last reply Reply Quote 0
                        • PLCHome 0
                          PLCHome 0 Developer @Wildbill last edited by

                          @wildbill 1.1.8 ist korrekt. Die ist jetzt auch im stable daher ist das Datum älter

                          1 Reply Last reply Reply Quote 1
                          • PLCHome 0
                            PLCHome 0 Developer @chucky666 last edited by

                            @chucky666 Growatt hat für jeden Umrichtertyp andere Datenpunktnamen. Ich kenne die Zuordnung nicht. Der Adapter nimmt einfach die Antwort von Growatt und legt die Objekte anhand der Struktur an. Bei der History kommen auch mehr als früher angezeigt wurden, die History ist aus der Weboberfläche verschwunden, ich bin mal gespannt, wielange man die Abfragen kann.

                            G 1 Reply Last reply Reply Quote 0
                            • PLCHome 0
                              PLCHome 0 Developer @chucky666 last edited by PLCHome 0

                              ...........

                              chucky666 1 Reply Last reply Reply Quote 0
                              • chucky666
                                chucky666 @PLCHome 0 last edited by

                                @plchome-0 danke dir . Ich teste gerade den Adapter Pvforecast

                                1 Reply Last reply Reply Quote 0
                                • G
                                  Garf @PLCHome 0 last edited by Garf

                                  ........

                                  1 Reply Last reply Reply Quote 0
                                  • W
                                    Wildbill @magix last edited by

                                    @PLCHome-0
                                    @magix sagte in Test Adapter Growatt v1.0.0:

                                    Mir ist aufgefallen, wenn ich nochmal in die Adaptereinstellungen gehe, das dann alle Felder wieder leer sind und auch keine Häkchen unten mehr gesetzt werden können.
                                    Ist das normal?
                                    Besteht die Möglichkeit noch die Voltwerte abzugreifen?

                                    Mir ist heute exakt das gleiche Problem aufgefallen. Wenn ich auf irgendeinem meine Apple-Geräte die Konfigseite des Adapters mit Safari öffne sind alle Werte leer. Das ist sowohl auf zwei Mac als auch auf dem IPad und IPhone so. Öffne ich Konfig-Seiten anderer Adapter so kann ich alles normal bedienen. Öffne ich auf den Macs die Konfig-Seite des Growatt-Adapter mit Firefox so sind alle Werte da und ich kann auch alles bedienen.
                                    Das Problem ist also nur die Konfiguration-Seite des Growatt-Adapters in Verbindung mit Safari. Alles andere geht.
                                    Inhaltsblocker sind deaktiviert, kann ja aber eigentlich nichts sein, wenn die anderen Seiten gehen.
                                    Was ist beim Growatt-Adapter anders oder wo kann ich ansetzen? Kann mal jemand mit Apple-Hardware testen, ob das bei ihm mit Safari auch so ist?
                                    Gruß, Jürgen

                                    PLCHome 0 1 Reply Last reply Reply Quote 0
                                    • PLCHome 0
                                      PLCHome 0 Developer @Wildbill last edited by

                                      @wildbill ich habe lieder kein safari, kannst du die Seite debuggen:
                                      https://wordpress.org/support/article/using-your-browser-to-diagnose-javascript-errors/

                                      W 2 Replies Last reply Reply Quote 0
                                      • W
                                        Wildbill @PLCHome 0 last edited by

                                        @plchome-0 Schaue ich mir die Tage mal an und poste es dann hier.
                                        Vielleicht komme ich morgen schon dazu.

                                        Gruss, Jürgen

                                        1 Reply Last reply Reply Quote 0
                                        • W
                                          Wildbill @PLCHome 0 last edited by

                                          @plchome-0 So, ich habe mal die Adapter-Konfig jeweils im Safari und Firefox geöffnet und einen Screenshot gemacht, sowie den Inhalt aus der Konsole kopiert:
                                          Safari
                                          Safari.png

                                          [Log] [2022-04-28T04:48:03.564Z] Try to connect (socket.io.js, line 65)
                                          [Log] " (translate.js, line 24)
                                                       <i class="material-icons">refresh</i>
                                                     ": {"en": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "de": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "ru": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "pt": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "nl": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "fr": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "es": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "pl": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "it": "
                                                       <i class="material-icons">refresh</i>
                                                     ", "zh-cn": "
                                                       <i class="material-icons">refresh</i>
                                                     "},
                                          [Log] " (translate.js, line 24)
                                                               Action
                                                             ": {"en": "
                                                               Action
                                                             ", "de": "
                                                               Action
                                                             ", "ru": "
                                                               Action
                                                             ", "pt": "
                                                               Action
                                                             ", "nl": "
                                                               Action
                                                             ", "fr": "
                                                               Action
                                                             ", "es": "
                                                               Action
                                                             ", "pl": "
                                                               Action
                                                             ", "it": "
                                                               Action
                                                             ", "zh-cn": "
                                                               Action
                                                             "},
                                          [Error] TypeError: undefined is not an object (evaluating 'key.length')
                                             decrypt (index_m.html:42)
                                             (anonyme Funktion) (adapter-settings.js:441)
                                             (anonyme Funktion) (socket.io.js:258)
                                             (anonyme Funktion) (socket.io.js:166)
                                          

                                          Firefox
                                          Firefox.png

                                          06:51:55.467 Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf https://sentry.iobroker.net/api/58/envelope/?sentry_key=43643152dab3481db69950ba866ee9d6&sentry_version=7. (Grund: CORS-Anfrage schlug fehl). Statuscode: (null).
                                          2 
                                          06:51:55.479 Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>".
                                          index_m.html
                                          06:51:55.479 Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>".
                                          index_m.html
                                          06:51:55.522 [2022-04-28T04:51:55.523Z] Try to connect socket.io.js:59:41
                                          06:51:55.527 Passwort-Felder sind in einem unsicheren (http://) Iframe vorhanden. Dies ist ein Sicherheitsrisiko, durch das Zugangsdaten gestohlen werden können.
                                          index_m.html
                                          06:51:55.560 " <i class="material-icons">refresh</i> ": {"en": " <i class="material-icons">refresh</i> ", "de": " <i class="material-icons">refresh</i> ", "ru": " <i class="material-icons">refresh</i> ", "pt": " <i class="material-icons">refresh</i> ", "nl": " <i class="material-icons">refresh</i> ", "fr": " <i class="material-icons">refresh</i> ", "es": " <i class="material-icons">refresh</i> ", "pl": " <i class="material-icons">refresh</i> ", "it": " <i class="material-icons">refresh</i> ", "zh-cn": " <i class="material-icons">refresh</i> "}, translate.js:24:17
                                          06:51:55.561 " Action ": {"en": " Action ", "de": " Action ", "ru": " Action ", "pt": " Action ", "nl": " Action ", "fr": " Action ", "es": " Action ", "pl": " Action ", "it": " Action ", "zh-cn": " Action "},
                                          
                                          

                                          Die Ausgaben sind zwar komplett unterschiedlich, aber beides vom selben MAC aus und ziemlich zeitgleich. Kannst Du da was Verdächtiges erkennen oder mich daraufhin gezielt irgendwo weiter "forschen" lassen?

                                          Gruss, Jürgen

                                          PLCHome 0 1 Reply Last reply Reply Quote 0
                                          • PLCHome 0
                                            PLCHome 0 Developer @Wildbill last edited by PLCHome 0

                                            @wildbill said in Test Adapter Growatt v1.0.0:

                                            key.length

                                            Der Fehler passiert auf Zeile 25 beim Entschlüsseln.
                                            Er behauptet, der Key hat keine Länge.
                                            Der wird aber in Zeile 159 gesetzt.
                                            Komisch.

                                                <script type="text/javascript">
                                                  let secret;
                                            
                                                  if (!encrypt || typeof encrypt !== 'function') {
                                                    function encrypt(key, value) {
                                                      if (value === undefined) {
                                                        value = key;
                                                        key = secret;
                                                      }
                                                      var result = '';
                                                      for (var i = 0; i < value.length; ++i) {
                                                        result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));
                                                      }
                                                      return result;
                                                    }
                                                  }
                                                  if (!decrypt || typeof decrypt !== 'function') {
                                                    function decrypt(key, value) {
                                                      if (value === undefined) {
                                                        value = key;
                                                        key = secret;
                                                      }
                                                      var result = '';
                                                      for (var i = 0; i < value.length; ++i) {
                                                        result += String.fromCharCode(key[i % key.length].charCodeAt(0) ^ value.charCodeAt(i));
                                                      }
                                                      return result;
                                                    }
                                                  }
                                            
                                                  function storeObject(id, obj, objList) {
                                                    let ebene = id.split('.');
                                                    ebene.shift();
                                                    ebene.shift();
                                                    if (ebene[0] == 'info' || ebene.length < 2) {
                                                      return;
                                                    }
                                                    let newId = ebene.join('.');
                                                    //let n = ebene[ebene.length-1]
                                                    //let parent = ebene.slice(0,ebene.length-1).join('.');
                                                    objList.push({ id: newId, name: obj.common.name, type: obj.common.type, created: new Date(obj.ts).toLocaleString(), action: 'normal' });
                                                  }
                                            
                                                  function showObjList(onChange, settings, objList) {
                                                    update = Object.assign({}, settings.objUpdate);
                                                    objList.forEach(function (o) {
                                                      if (update[o.id.toLowerCase]) {
                                                        o.action = update[o.id.toLowerCase].action;
                                                      }
                                                      delete update[o.id.toLowerCase];
                                                    });
                                                    Object.keys(update).forEach(id => {
                                                      if (update[id].action == 'delete') {
                                                        objList.push({ id: update[id].id, name: '', type: '', created: '', action: update[id].action });
                                                      }
                                                    });
                                                    objList.sort(function (dev1, dev2) {
                                                      let x = dev1.id.split('.'),
                                                        y = dev2.id.split('.');
                                                      while ((x.length > 0 && y.length > 0 && x.length == y.length) || (x.length > 1 && y.length > 1 && x.length != y.length)) {
                                                        let a = x.shift().toUpperCase();
                                                        b = y.shift().toUpperCase();
                                                        if (a != b) {
                                                          return a > b ? 1 : -1;
                                                        }
                                                      }
                                                      return y.length - x.length;
                                                    });
                                                    values2table('objects', objList, onChange, function () {
                                                      $('[data-name=id]').attr('disabled', 'disabled');
                                                      $('[data-name=name]').attr('readonly', 'readonly');
                                                      $('[data-name=type]').attr('readonly', 'readonly');
                                                      $('[data-name=created]').attr('readonly', 'readonly');
                                                      return;
                                                    });
                                                  }
                                            
                                                  function emitObjects(onChange, settings) {
                                                    socket.emit(
                                                      'getObjectView',
                                                      'system',
                                                      'state',
                                                      { startkey: 'growatt.' + instance + '.', endkey: 'growatt.' + instance + '.\u9999', include_docs: true },
                                                      function (err, _objects) {
                                                        let objList = [];
                                                        if (_objects && _objects.rows && _objects.rows.length) {
                                                          for (let j = 0; j < _objects.rows.length; j++) {
                                                            storeObject(_objects.rows[j].id, _objects.rows[j].value, objList);
                                                          }
                                                        }
                                                        showObjList(onChange, settings, objList);
                                                      }
                                                    );
                                                  }
                                            
                                                  function loadHelper(settings, onChange) {
                                                    if (!settings) return;
                                                    improveValues(settings);
                                                    $('.value').each(function () {
                                                      var $key = $(this);
                                                      var id = $key.attr('id');
                                                      if (
                                                        (id === 'password' || id === 'shareKey') &&
                                                        (typeof supportsFeature !== 'function' || !supportsFeature('ADAPTER_AUTO_DECRYPT_NATIVE'))
                                                      ) {
                                                        settings[id] = decrypt(secret, settings[id]);
                                                      }
                                                      if ($key.attr('type') === 'checkbox') {
                                                        // do not call onChange direct, because onChange could expect some arguments
                                                        $key.prop('checked', settings[id]).on('change', () => onChange());
                                                      } else {
                                                        // do not call onChange direct, because onChange could expect some arguments
                                                        $key
                                                          .val(settings[id])
                                                          .on('change', () => onChange())
                                                          .on('keyup', () => onChange());
                                                      }
                                                    });
                                                    $('#keyLogin')
                                                      .change(function () {
                                                        if ($(this).prop('checked')) {
                                                          $('.user').hide();
                                                          $('.password').hide();
                                                          $('.shareKey').show();
                                                        } else {
                                                          $('.user').show();
                                                          $('.password').show();
                                                          $('.shareKey').hide();
                                                        }
                                                      })
                                                      .trigger('change');
                                                    $('#sessionHold')
                                                      .change(function () {
                                                        if ($(this).prop('checked')) {
                                                          $('.sessionTime').show();
                                                        } else {
                                                          $('.sessionTime').hide();
                                                        }
                                                      })
                                                      .trigger('change');
                                                    onChange(false);
                                            
                                                    settings.objUpdate = settings.objUpdate || {};
                                                    emitObjects(onChange, settings);
                                                    $('#tab-manage-objects')
                                                      .find('.btn-objects-reload')
                                                      .on('click', function () {
                                                        var obj = {};
                                                        obj.objUpdate = getObjUpdate();
                                                        emitObjects(onChange, obj);
                                                      });
                                                    // reinitialize all the Materialize labels on the page if you are dynamically adding inputs:
                                                    if (M) M.updateTextFields();
                                                  }
                                            
                                                  // This will be called by the admin adapter when the settings page loads
                                                  function load(settings, onChange) {
                                                    socket.emit('getObject', 'system.config', function (err, obj) {
                                                      secret = (obj.native ? obj.native.secret : '') || 'Zgfr56gFe87jJOM';
                                                      loadHelper(settings, onChange);
                                                    });
                                                    onChange(false);
                                                  }
                                            

                                            Kannst du die Seite einmal anpassen und schauen, was secret macht?
                                            In das Installationsverzeichnis wechseln normal cd /opt/iobroker
                                            dann in den Adapter Admin cd node_modules/iobroker.growatt/admin
                                            Und dort mit nano oder vi editieren nano index_m.html
                                            danach cd /opt/iobroker
                                            und iobroker upload growatt eingeben

                                            // This will be called by the admin adapter when the settings page loads
                                                  function load(settings, onChange) {
                                                    socket.emit('getObject', 'system.config', function (err, obj) {
                                                      console.log(obj.native) // <== dieses einfügen
                                                      console.log(err) // <== dieses einfügen
                                                      secret = (obj.native ? obj.native.secret : '') || 'Zgfr56gFe87jJOM';
                                                      console.log(secret) // <== dieses einfügen
                                                      loadHelper(settings, onChange);
                                                    });
                                                    onChange(false);
                                                  }
                                            

                                            Sollte dann so aussehen:

                                            {secret: '53ea2cb8f1eeea7cd82------76'}
                                            null
                                            53ea2cb8f1eeea7cd82----76
                                            
                                            W 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            643
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            adapter growatt pv-anlage shine solar test tester
                                            71
                                            799
                                            284154
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo