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. Tester
  4. Test Adapter Growatt v3.3.1

NEWS

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

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

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

Test Adapter Growatt v3.3.1

Geplant Angeheftet Gesperrt Verschoben Tester
adaptergrowattpv-anlageshinesolartesttester
808 Beiträge 72 Kommentatoren 355.6k Aufrufe 63 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.
  • PLCHome 0P PLCHome 0

    @fischi87 Es sieht aus, als wenn die neuen Propetys bei dir keinen Wert haben.
    Wie ist deine Konfiguration der Timer?

    Es sieht aus, als wäre das hier nicht korrekt installiert, versuche mal:
    iobroker upload growatt

    Oder setze die Propertys: 60, 600, true, 0, 30, 60

    fischi87F Offline
    fischi87F Offline
    fischi87
    schrieb am zuletzt editiert von
    #115

    @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 0P 1 Antwort Letzte Antwort
    0
    • fischi87F fischi87

      @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 0P Offline
      PLCHome 0P Offline
      PLCHome 0
      Developer
      schrieb am zuletzt editiert von
      #116

      @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>

      fischi87F 3 Antworten Letzte Antwort
      0
      • PLCHome 0P PLCHome 0

        @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>

        fischi87F Offline
        fischi87F Offline
        fischi87
        schrieb am zuletzt editiert von
        #117

        @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 Antwort Letzte Antwort
        0
        • PLCHome 0P PLCHome 0

          @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>

          fischi87F Offline
          fischi87F Offline
          fischi87
          schrieb am zuletzt editiert von
          #118

          @plchome-0

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

          1 Antwort Letzte Antwort
          0
          • PLCHome 0P PLCHome 0

            @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>

            fischi87F Offline
            fischi87F Offline
            fischi87
            schrieb am zuletzt editiert von
            #119

            @plchome-0

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

            1 Antwort Letzte Antwort
            0
            • PLCHome 0P Offline
              PLCHome 0P Offline
              PLCHome 0
              Developer
              schrieb am zuletzt editiert von
              #120

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

              W 1 Antwort Letzte Antwort
              1
              • PLCHome 0P PLCHome 0

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

                W Online
                W Online
                Wildbill
                schrieb am zuletzt editiert von
                #121

                @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 0P 1 Antwort Letzte Antwort
                0
                • PLCHome 0P PLCHome 0
                  Aktuelle Test Version 3.3.1
                  Veröffentlichungsdatum 13.08.2024
                  Github Link https://github.com/PLCHome/ioBroker.growatt

                  Hallo,

                  ich habe einen Growatt SPH4000 Solar Wechselrichter mit ACCU.
                  Growatt bietet zum Überwachen seiner Solarsysteme eine Webseite und eine App an.
                  Ich habe die API benutzt, um einen Adapter für ioBroker zu erstellen.

                  Zu Installation: Der Adapter kann über den ioBroker mit der Einstellung Beta (latest) installiert werden.

                  Der Adapter fragt alle 30sec. die Werte des Wechselrichters ab und legt diese als einzelne Objekte ab.
                  Die Werte ändern sich wie in der Shine App und im Webportal nur alle 5min.

                  Leider sind alle Gerätetypen bei Gowatt mit einer anderen API ausgestattet. Ich habe versucht, so viele wie möglich zu Implementieren.

                  Wäre nett wenn ihr den Adapter testen könntet damit ich mit der 0.0.14 in die Stable (default) komme.

                  Hello,

                  I have a Growatt SPH4000 solar inverter with ACCU.
                  Growatt offers a website and an app for monitoring its solar systems.
                  I used the API to create an adapter for ioBroker.

                  To installation: The adapter can be installed via the ioBroker with the setting Beta (latest).

                  The adapter asks every 30sec. saves the values ​​of the inverter and saves them as individual objects.
                  As in the Shine app and in the web portal, the values ​​change only every 5 minutes.

                  Unfortunately, all device types at Gowatt have a different API. I tried to implement as many as possible.

                  Would be nice if you could test the adapter so that I can get into the stable (default) with 0.0.14.

                  chucky666C Offline
                  chucky666C Offline
                  chucky666
                  schrieb am zuletzt editiert von
                  #122

                  @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 0P 2 Antworten Letzte Antwort
                  0
                  • W Wildbill

                    @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 0P Offline
                    PLCHome 0P Offline
                    PLCHome 0
                    Developer
                    schrieb am zuletzt editiert von
                    #123

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

                    1 Antwort Letzte Antwort
                    1
                    • chucky666C chucky666

                      @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 0P Offline
                      PLCHome 0P Offline
                      PLCHome 0
                      Developer
                      schrieb am zuletzt editiert von
                      #124

                      @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 Antwort Letzte Antwort
                      0
                      • chucky666C chucky666

                        @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 0P Offline
                        PLCHome 0P Offline
                        PLCHome 0
                        Developer
                        schrieb am zuletzt editiert von PLCHome 0
                        #125

                        ...........

                        chucky666C 1 Antwort Letzte Antwort
                        0
                        • PLCHome 0P PLCHome 0

                          ...........

                          chucky666C Offline
                          chucky666C Offline
                          chucky666
                          schrieb am zuletzt editiert von
                          #126

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

                          1 Antwort Letzte Antwort
                          0
                          • PLCHome 0P PLCHome 0

                            @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 Offline
                            G Offline
                            Garf
                            schrieb am zuletzt editiert von Garf
                            #127

                            ........

                            1 Antwort Letzte Antwort
                            0
                            • M magix

                              Hi,
                              danke vorab für den Adapter.
                              Ich habe seit Heute meine Growatt Anlage am laufen und gleich den Adapter installiert.

                              Habe mich ohne API (wusste nicht woher) angemeldet mit Benutzer+Pass.
                              Datenobjekte wurde gleich erstellt, soweit alle TOP.

                              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?

                              Danke und schöne Grüße

                              W Online
                              W Online
                              Wildbill
                              schrieb am zuletzt editiert von
                              #128

                              @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 0P 1 Antwort Letzte Antwort
                              0
                              • W Wildbill

                                @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 0P Offline
                                PLCHome 0P Offline
                                PLCHome 0
                                Developer
                                schrieb am zuletzt editiert von
                                #129

                                @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 Antworten Letzte Antwort
                                0
                                • PLCHome 0P PLCHome 0

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

                                  W Online
                                  W Online
                                  Wildbill
                                  schrieb am zuletzt editiert von
                                  #130

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

                                  Gruss, Jürgen

                                  1 Antwort Letzte Antwort
                                  0
                                  • PLCHome 0P PLCHome 0

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

                                    W Online
                                    W Online
                                    Wildbill
                                    schrieb am zuletzt editiert von
                                    #131

                                    @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 0P 1 Antwort Letzte Antwort
                                    0
                                    • W Wildbill

                                      @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 0P Offline
                                      PLCHome 0P Offline
                                      PLCHome 0
                                      Developer
                                      schrieb am zuletzt editiert von PLCHome 0
                                      #132

                                      @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 Antwort Letzte Antwort
                                      0
                                      • PLCHome 0P 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 Online
                                        W Online
                                        Wildbill
                                        schrieb am zuletzt editiert von
                                        #133

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

                                        {secret: '53ea2cb8f1eeea7cd82------76'}

                                        Du meintest schon, dass ich den kompletten Block ab "Funktion load" bis einschließlich der geschweiften Klammer unter dem Block, also die kompletten Zeilen 1-11 in Deinem ersten Code oben durch Zeile 1 des zweiten Code-Block ersetze? Die Zeilen 2 und 3 sind wohl so rein gerutscht?
                                        Falls ja, dann habe ich das zumindest so gemacht und einen Teilerfolg. Sowohl Firefox als auch Safari bringen jetzt beim Aufruf der Admin-Seite eine Meldung

                                        Please implement save function in your admin/index.html
                                        

                                        und die Seite öffnet sich ohne irgendwelche eingetragenen Werte. ABER. Ich könnte so sowohl in Firefox als auch Safari Änderungen vornehmen. Im Safari hatte ich vorher ja nichtmal irgendwelche Checkboxen zum Anklicken. In der Konsole von Safari tauchen die Meldungen am Schluss (die letzten 5 Zeilen) auch nicht mehr auf.

                                        Ich spiele mal die Datei zurück und mache noch einen Upload, damit wieder Daten vom Großtat reinkommen, sage aber schonmal Danke, die Richtung scheint zu stimmen. Keine Ahnung was Safari da anders macht als andere Browser...

                                        Gruss, Jürgen

                                        PLCHome 0P 1 Antwort Letzte Antwort
                                        0
                                        • W Wildbill

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

                                          {secret: '53ea2cb8f1eeea7cd82------76'}

                                          Du meintest schon, dass ich den kompletten Block ab "Funktion load" bis einschließlich der geschweiften Klammer unter dem Block, also die kompletten Zeilen 1-11 in Deinem ersten Code oben durch Zeile 1 des zweiten Code-Block ersetze? Die Zeilen 2 und 3 sind wohl so rein gerutscht?
                                          Falls ja, dann habe ich das zumindest so gemacht und einen Teilerfolg. Sowohl Firefox als auch Safari bringen jetzt beim Aufruf der Admin-Seite eine Meldung

                                          Please implement save function in your admin/index.html
                                          

                                          und die Seite öffnet sich ohne irgendwelche eingetragenen Werte. ABER. Ich könnte so sowohl in Firefox als auch Safari Änderungen vornehmen. Im Safari hatte ich vorher ja nichtmal irgendwelche Checkboxen zum Anklicken. In der Konsole von Safari tauchen die Meldungen am Schluss (die letzten 5 Zeilen) auch nicht mehr auf.

                                          Ich spiele mal die Datei zurück und mache noch einen Upload, damit wieder Daten vom Großtat reinkommen, sage aber schonmal Danke, die Richtung scheint zu stimmen. Keine Ahnung was Safari da anders macht als andere Browser...

                                          Gruss, Jürgen

                                          PLCHome 0P Offline
                                          PLCHome 0P Offline
                                          PLCHome 0
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #134

                                          @wildbill said in Test Adapter Growatt v1.0.0:

                                          das zumin

                                          In der Datei index_m.html ab Zeile 174 die Funktion erstezen.
                                          e8bd488f-0751-46db-84a1-0cc086990b03-image.png

                                          gegen::
                                          559a6db0-a376-447d-843e-ec0ebb3e41e7-image.png

                                          W 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

                                          686

                                          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