Ankündigung

Einklappen
Keine Ankündigung bisher.

Neue Library für rscp Kommunikation mit E3DC Speicher inkl. Kommandozeilen utility.

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Neue Library für rscp Kommunikation mit E3DC Speicher inkl. Kommandozeilen utility.

    Hallo zusammen

    Wollte nur mal los werden, dass ich ein Kommandozeilen Tool geschrieben habe (inkl. wieder verwendbare go-library) welches RSCP mit E3DC Speicher spricht.
    Es gibt diverse C basierende utilities, jedoch meist für ein speziellen Zweck. Ebenfalls gibt's für Python eine Library auf welcher wiederum diverse Utilities drauf aufbauen, jedoch meist auch wieder ohne direkten "Protokoll" Zugriff.
    Ich nutze es im Zusammenhang mit Home Assistant produktiv.

    Ich wollte auf der Kommandozeilen ebene das volle Protokoll benutzen können als Binary, ohne wuchtiges Python.
    Wer Interesse hat darf gerne mal reinschauen




    Go library to communicate with a E3DC system implementing the RSCP (Remote Storage Control Protocol) - spali/go-rscp

    #2
    Hallo Grandslam,

    das klingt sehr interessant. Ich würde es mir gerne anschauen, sobald die Elektriker es geschafft haben die Kiste wieder zum laufen zu bekommen. Nutze aktuell noch die Modbus-Variante um die Daten des E3DC abzugreifen, wollte aber eh in den nächsten Wochen eine der RSCP-Varianten ausprobieren.
    Hast Du ein Beispiel wie Du es in HA integriert hast?

    Kommentar


      #3
      Habe hier mal quick and dirty ein Beispiel zusammen gebastelt... ist bei mir noch ein wenig komplexer, aber es erwähnt mindestens alle Ansätze die ich auch selber benutzte. Bis hin zu dynamisch generierten Requests für die History Daten.
      Muss zugeben, ein grosser Nachteil ist, dass es keine "Events" gibt. Sprich das ganze basiert halt auf polling. Dafür hat man fast unendlich Möglichkeiten.

      Go library to communicate with a E3DC system implementing the RSCP (Remote Storage Control Protocol) - spali/go-rscp

      Kommentar


        #4
        Dankeschön! Mein E3/DC ist leider immer noch nicht repariert.. Ich melde mich wenn's mal soweit ist

        Kommentar


          #5
          Nachdem die Kiste seit gestern Mittag endlich wieder läuft habe ich es Abends direkt ausprobiert.
          Ich nutze HA in einem Docker Container auf einem RPi, also nur bedingt vergleichbar. Ich habe das binary letztlich in /bin geschoben und musste aus dem shell-script alles bis auf die letzte Zeile auskommentieren. So konnte ich zumindest das script in der Konsole ausführen. Bekomme allerdings folgende Meldung:

          Edit:
          <erledigt>

          EMS_POWER_PV muss "EMS_REQ_POWER_PV" heißen

          Zuletzt geändert von MarkusLa; 16.03.2021, 14:26.

          Kommentar


            #6
            Die Basics scheinen nun zu laufen, wobei mir der Sensor in HA noch nichts meldet.

            Parallel versuche ich noch die Werte aus den Leistungsmessern zu erhalten. Wie muss das JSON dazu denn aufgebaut sein? Wenn ich es recht verstehe muss ich da irgendwie schachteln?

            Kommentar


              #7
              Tag Referenz findest du hier: https://github.com/spali/go-rscp/blo...er/rscp/tag.go

              PS: Ich habe in anderen Implementationen zum Teil widersprüchliche Tags mit gleicher "Nummer" gesehen.... ich habe mich primär an die Doku gehalten, die ich herunter laden konnte für die Quadraporte. Ich habe keine konkreten Beispiele... aber ich werde das Gefühl nicht los, dass entweder andere Modelle teilweise andere Tags haben, oder es zu mindestens Versionsunterschiede gibt. Aber die meisten Tags sind die selben. Daher kann man das meiste Abfragen was man braucht.


              Hier ein geschachteltes Beispiel mit diversen Werten in einer Abfrage:
              Code:
              [
                "INFO_REQ_UTC_TIME",
                "SRV_REQ_IS_ONLINE",
                "INFO_REQ_SW_RELEASE",
                "EMS_REQ_DERATE_AT_PERCENT_VALUE",
                "EMS_REQ_DERATE_AT_POWER_VALUE",
                "EMS_REQ_INSTALLED_PEAK_POWER",
                "EMS_REQ_EXT_SRC_AVAILABLE",
                "INFO_REQ_MAC_ADDRESS",
                "INFO_REQ_SERIAL_NUMBER",
                "EMS_REQ_BAT_SOC",
                "EMS_REQ_POWER_ADD",
                "EMS_REQ_POWER_BAT",
                "EMS_REQ_POWER_HOME",
                "EMS_REQ_POWER_GRID",
                "EMS_REQ_SELF_CONSUMPTION",
                "EMS_REQ_AUTARKY",
                "EMS_REQ_GET_IDLE_PERIODS",
                "EMS_REQ_STATUS",
                "EMS_REQ_GET_MANUAL_CHARGE",
                [
                  "BAT_REQ_DATA",
                  [
                    ["BAT_INDEX", 0],
                    "BAT_REQ_DEVICE_STATE",
                    "BAT_REQ_MAX_DCB_CELL_TEMPERATURE",
                    "BAT_REQ_MODULE_VOLTAGE",
                    "BAT_REQ_CURRENT",
                    "BAT_REQ_MAX_BAT_VOLTAGE",
                    "BAT_REQ_MAX_CHARGE_CURRENT",
                    "BAT_REQ_EOD_VOLTAGE",
                    "BAT_REQ_MAX_DISCHARGE_CURRENT",
                    "BAT_REQ_RSOC",
                    "BAT_REQ_CHARGE_CYCLES",
                    "BAT_REQ_TERMINAL_VOLTAGE",
                    "BAT_REQ_STATUS_CODE",
                    "BAT_REQ_ERROR_CODE",
                    "BAT_REQ_DEVICE_NAME"
                  ]
                ],
                [
                  "PM_REQ_DATA",
                  [
                    ["PM_INDEX", 1],
                    "PM_REQ_POWER_L1",
                    "PM_REQ_POWER_L2",
                    "PM_REQ_POWER_L3",
                    "PM_REQ_ACTIVE_PHASES",
                    "PM_REQ_MODE",
                    "PM_REQ_ENERGY_L1",
                    "PM_REQ_ENERGY_L2",
                    "PM_REQ_ENERGY_L3",
                    "PM_REQ_DEVICE_ID",
                    "PM_REQ_ERROR_CODE",
                    "PM_REQ_FIRMWARE_VERSION",
                    "PM_REQ_VOLTAGE_L1",
                    "PM_REQ_VOLTAGE_L2",
                    "PM_REQ_VOLTAGE_L3",
                    "PM_REQ_TYPE"
                  ]
                ],
                "EMS_REQ_GET_POWER_SETTINGS",
                "EMS_REQ_GET_SYS_SPECS"
              ]

              Kommentar


                #8
                Deine Lib funktioniert wirklich klasse, habe es nun seit ein paar Tagen in HA integriert und polle alle 5 Sekunden, bislang nur ein Aussetzer.
                Der Aufruf für die historischen Daten ist mir allerdings echt zu hoch. Was für ein Linux-Voodoo muss ich veranstalten das jq das schluckt?
                You do not have permission to view this gallery.
                This gallery has 1 photos.

                Kommentar


                  #9
                  MarkusLa
                  Damit kämpfe ich selber auch noch

                  Folgendes habe ich und funktioniert soweit.
                  Das einzige Problem ist, irgendwo in der Zeitzonen Umrechnung/Korrektur habe ich mich vertan... die Werte nähern sich über dem Tag um eine Stunde verschoben an und ändern sich in der letzten Stunde des Tages nicht mehr. Da muss ich nochmals drüber... hatte aber noch keine Zeit dem nach zu gehen.
                  Wusste bis dato gar nicht wie mächtig jq sein kann.

                  Grobe Erklährung:
                  Das input.jq erstellt die Abfrage dynamisch nach der aktuellen Zeit für Tag,Monat,Jahr und auch jeweils die vorherige Periode.
                  Das output.jq räumt die Ausgabe dann noch ein wenig auf.
                  Also der "zeitverschiebungsfehler" steckt definitiv im input.jq.

                  Hier der Code:

                  input.jq:
                  Code:
                  (
                    now as $now |
                    # apply local timezone diff to utc time
                    def fixTimezone: . | (
                      . -= (0|strflocaltime("%H") | tonumber) * 3600 |
                      . -= (0|strflocaltime("%M") | tonumber) * 60
                    );
                    # returns the timespan the given amount of days as timestamp (seconds)
                    def timespanDay(days): . | (
                      . = (24 * 60 * 60 * days)
                    );
                    # returns the start of the day of the given date as timestamp
                    def startOfDay: . | (
                      . = if . == null then $now else . end |
                      gmtime | [.[0],.[1],.[2],0,0,0,0,0] | mktime
                    );
                    # returns the start of the month of the given date as timestamp
                    def startOfMonth: . | (
                      . = if . == null then $now else . end |
                      gmtime | [.[0],.[1],1,0,0,0,0,0] | mktime
                    );
                    # returns the last day of the month (or number of days in the month) from the given date
                    def daysInMonth: . | (
                      . = if . == null then $now else . end |
                      (. | gmtime | .[2] = 28 | mktime | . += timespanDay(4)) as $next_month |
                      $next_month - timespanDay($next_month | gmtime | .[2]) | gmtime | .[2]
                    );
                    # returns the start of the year from the given date as timestamp
                    def startOfYear: . | (
                      . = if . == null then $now else . end |
                      gmtime | [.[0],0,1,0,0,0,0,0] | mktime
                    );
                    # returns the last day of the year (or number of days in the year) from the given date
                    def daysInYear: . | (
                      . = if . == null then $now else . end |
                      gmtime | [.[0],11,31,0,0,0,0,0] | mktime | strftime("%j") | tonumber
                    );
                    . =
                  [
                    [ # day current
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = startOfDay | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay(1) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN", ( . = timespanDay(1) | todateiso8601 )]
                      ]
                    ],
                    [ # day before
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = (startOfDay - timespanDay(1)) | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay(1) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN", ( . = timespanDay(1) | todateiso8601 )]
                      ]
                    ],
                    [ # month current
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = startOfMonth | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay(daysInMonth) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN", ( . = timespanDay(daysInMonth) | todateiso8601 )]
                      ]
                    ],
                    [ # month before
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = (startOfMonth - timespanDay(1)) | startOfMonth | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay((startOfMonth - timespanDay(1)) | startOfMonth | daysInMonth) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN",     ( . = timespanDay((startOfMonth - timespanDay(1)) | startOfMonth | daysInMonth) | todateiso8601 )]
                      ]
                    ],
                    [ # year current
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = startOfYear | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay(daysInYear) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN", ( . = timespanDay(daysInYear) | todateiso8601 )]
                      ]
                    ],
                    [ # year before
                      "DB_REQ_HISTORY_DATA_DAY",
                      [
                        ["DB_REQ_HISTORY_TIME_START", ( . = (startOfYear - timespanDay(1)) | startOfYear | fixTimezone | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_INTERVAL", ( . = timespanDay((startOfYear - timespanDay(1)) | startOfYear | daysInYear) | todateiso8601 )],
                        ["DB_REQ_HISTORY_TIME_SPAN",     ( . = timespanDay((startOfYear - timespanDay(1)) | startOfYear | daysInYear) | todateiso8601 )]
                      ]
                    ]
                  ]
                  )

                  output.jq:
                  Code:
                  def weekdays: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
                  def chargeType: ["idleCharge","idleDischarge"];
                  def historyPeriod: ["day","lastday", "month", "lastmonth", "year", "lastyear"];
                  { "result":    
                      ( # cleanup db history data
                          .DB_HISTORY_DATA = (
                              .DB_HISTORY_DATA_DAY | to_entries | map(
                                  {    # name keys by array index
                                      (historyPeriod[.key]): (
                                          # only get sum container witouth index
                                          .value.DB_SUM_CONTAINER | del(.DB_GRAPH_INDEX)
                                      )
                                  }
                              ) | add
                          ) | del (.DB_HISTORY_DATA_DAY) # delete origin DB_HISTORY_DATA_DAY
                      )
                  }

                  Die Befehlszeile:
                  Code:
                  jq -ncM "$(cat ./input.jq)" | e3dc -splitrequests | jq -cM "$(cat ./output.jq)"

                  Kommentar


                    #10
                    Danke, so macht das Sinn :-)
                    Warum nutzt Du für Interval und Timespan Timestamps zum Input? Wäre es nicht einfacher da Sekunden rein zu geben? Wäre zumindest, aus Sicht der Schnittstelle, verständlicher zu nutzen.

                    Nähere mich langsam sinnvollen Ausgaben die dem Portal entsprechen. Mit dem folgenden Input bekomme ich die Daten vom 19.03. bis auf ein paar (100) Wh hier und da:

                    Code:
                    [
                    [
                    "DB_REQ_HISTORY_DATA_DAY",
                    [
                    ["DB_REQ_HISTORY_TIME_START", "2021-03-19T23:00:00Z"],
                    ["DB_REQ_HISTORY_TIME_INTERVAL", "1970-01-02T00:00:00Z" ],
                    ["DB_REQ_HISTORY_TIME_SPAN", "1970-01-01T23:59:59Z" ]
                    ]
                    ]
                    ]

                    Kommentar


                      #11
                      Zitat von MarkusLa Beitrag anzeigen
                      Danke, so macht das Sinn :-)
                      Warum nutzt Du für Interval und Timespan Timestamps zum Input? Wäre es nicht einfacher da Sekunden rein zu geben? Wäre zumindest, aus Sicht der Schnittstelle, verständlicher zu nutzen.
                      Da gebe ich dir recht, aber RSCP seitig sind das alles Timestamps. Und ich wollte nicht anfangen da für einzelne Werte dies speziell zu implementieren. Das würde auch nur wieder verwirren.


                      Kommentar


                        #12
                        Die Library läuft nach wie vor sehr zuverlässig. Das Laden der historischen Daten habe ich inzwischen rausgeschmissen, da HA alles relevante für mich historisiert.
                        Nun versuche ich noch die neu hinzugekommene Wallbox einzubinden. Einfache Daten bekomme ich gelesen. Sobald ich allerdings
                        "WB_REQ_PARAM_1" oder "WB_REQ_EXTERN_DATA_ALG" hinzufüge, dumpt die Library leider.
                        Zunächst möchte ich die Daten auslesen, am Ende dann auch die WB steuern. Laden mit Sonnenstrom mit der E3DC-Box funktioniert für uns nämlich leider so gar nicht, und eine Steuerung per Hand ist auf Dauer nicht machbar.

                        Folgender Request funktioniert:
                        Code:
                        [
                        "INFO_REQ_UTC_TIME",
                        "EMS_REQ_POWER_PV",
                        "EMS_REQ_POWER_WB_ALL",
                        "EMS_REQ_POWER_WB_SOLAR",
                        [
                        "WB_REQ_DATA",
                        [
                        ["WB_INDEX", 0],
                        "WB_REQ_ENERGY_ALL",
                        "WB_REQ_ENERGY_SOLAR",
                        "WB_REQ_STATUS",
                        "WB_REQ_MODE",
                        "WB_REQ_PM_ACTIVE_PHASES",
                        "WB_REQ_PM_MODE",
                        "WB_REQ_PM_DEVICE_STATE",
                        "WB_REQ_PM_POWER_L1",
                        "WB_REQ_PM_POWER_L2",
                        "WB_REQ_PM_POWER_L3",
                        "WB_REQ_DIAG_INFOS"
                        ]
                        ]
                        ]
                        Dieser hier nicht:
                        Code:
                        [
                        "INFO_REQ_UTC_TIME",
                        "EMS_REQ_POWER_PV",
                        "EMS_REQ_POWER_WB_ALL",
                        "EMS_REQ_POWER_WB_SOLAR",
                        [
                        "WB_REQ_DATA",
                        [
                        ["WB_INDEX", 0],
                        "WB_REQ_PARAM_1",
                        "WB_REQ_EXTERN_DATA_ALG"
                        ]
                        ]
                        ]
                        Code:
                        panic: reflect: call of reflect.Value.Elem on slice Value
                        goroutine 1 [running]:
                        reflect.Value.Elem(0x16de78, 0x80c290, 0x97, 0x920008, 0x0, 0x0)
                        /opt/hostedtoolcache/go/1.15.7/x64/src/reflect/value.go:843 +0x184
                        github.com/spali/go-rscp/rscp.readMessage(0x80a140, 0x0, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:132 +0x3ac
                        github.com/spali/go-rscp/rscp.read(0x80a140, 0x16a230, 0x80c250, 0x92001a, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:79 +0x420
                        github.com/spali/go-rscp/rscp.readMessage(0x80a140, 0x0, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:129 +0x31c
                        github.com/spali/go-rscp/rscp.read(0x80a140, 0x16a230, 0x80c210, 0x92004b, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:79 +0x420
                        github.com/spali/go-rscp/rscp.readMessage(0x80a140, 0x80c1f0, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:129 +0x31c
                        github.com/spali/go-rscp/rscp.read(0x80a140, 0x16a230, 0x80c1a0, 0x86, 0xa0, 0x982000)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:79 +0x420
                        github.com/spali/go-rscp/rscp.Read(0x95006c, 0x8aae2c, 0x8aadf8, 0x8aae08, 0x8aadfc, 0x812260, 0x20, 0x20, 0x0, 0x0, ...)
                        /home/runner/work/go-rscp/go-rscp/rscp/reader.go:162 +0x26c
                        github.com/spali/go-rscp/rscp.(*Client).receive(0x950000, 0x952050, 0x5, 0x5, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/rscp/client.go:86 +0x1ac
                        github.com/spali/go-rscp/rscp.(*Client).SendMultiple(0x950000, 0x952050, 0x5, 0x5, 0x5, 0x5, 0x0, 0x0, 0x6)
                        /home/runner/work/go-rscp/go-rscp/rscp/client.go:189 +0x68
                        main.run(0x0, 0x0, 0x0, 0x0, 0x0)
                        /home/runner/work/go-rscp/go-rscp/cmd/e3dc/e3dc.go:43 +0x5d4
                        main.main()
                        /home/runner/work/go-rscp/go-rscp/cmd/e3dc/e3dc.go:91 +0xa0
                        Hast Du eine Idee wo das Problem ist / wie ich hier weiterkommen kann?

                        Kommentar


                          #13
                          Du kannst den Request mal mit
                          Code:
                          -debug 6
                          absetzen. Dann bekommst du die einzelnen Encoding und Decoding Schritte angezeigt mit vielen Infos.
                          Wenn ich raten müsste... könnte es sein das du ein anderes Model hast als Quadraporte?
                          Ich musste schon feststellen, dass die TAGs z.T. je nach Model anders sind. Oder teilweise auch die erwarteten oder zurück gelieferten Typen.
                          Leider hab ich keine WB mit der Quadraporte wo ich das selber testen könnte

                          Kommentar


                            #14
                            Danke für Deine schnelle Rückmeldung. Wir haben ein S10 mit der E3DC-Wallbox.
                            Die Tags habe ich mir bei E3DC-Control abgeschaut.

                            Folgendes wird ausgegeben:
                            Code:
                            INFO[0000] Connecting to 192.168.1.86:5033
                            INFO[0000] successfully connected to 192.168.1.86:5033
                            
                            DEBU[0000] read [{ RSCP_AUTHENTICATION UChar8 10 }]
                            INFO[0000] successfully authenticated (level: AUTH_LEVEL_USER)
                            DEBU[0000] write [{ INFO_REQ_UTC_TIME None <nil> } { EMS_REQ_POWER_PV None <nil> } { EMS_REQ_POWER_WB_ALL None <nil> } { EMS_REQ_POWER_WB_SOLAR None <nil> } { WB_REQ_DATA Container [{ WB_INDEX UChar8 0 } { WB_REQ_PARAM_1 None <nil> } { WB_REQ_EXTERN_DATA_ALG None <nil> }] }]
                            TRAC[0000] write plain []byte{0xe3, 0xdc, 0x0, 0x11, 0xe2, 0x7c, 0x2, 0x61, 0x0, 0x0, 0x0, 0x0, 0xeb, 0x90, 0x51, 0x18, 0x39, 0x0, 0xf, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xe, 0xe, 0x16, 0x0, 0x1, 0x0, 0x4, 0xe, 0x3, 0x1, 0x0, 0x0, 0x1b, 0x10, 0x4, 0xe, 0x0, 0x0, 0x0, 0x14, 0x10, 0x4, 0xe, 0x0, 0x0, 0x0, 0x34, 0x10, 0x1b, 0x62}
                            TRAC[0000] write crypt []byte{0x57, 0xf5, 0xa6, 0x18, 0x96, 0x4a, 0xe8, 0xc, 0x2e, 0x20, 0x8f, 0x24, 0x2c, 0xe7, 0x80, 0x66, 0xd7, 0x78, 0x12, 0x60, 0x2f, 0xcf, 0x72, 0x1, 0x5a, 0xe7, 0xdc, 0xd6, 0x76, 0xdc, 0xde, 0xca, 0xd1, 0xbe, 0xf6, 0x73, 0xd4, 0xe3, 0x1e, 0x6b, 0xd4, 0xac, 0xd1, 0x66, 0x3b, 0x60, 0xe7, 0xb, 0xc2, 0x7c, 0x2a, 0x46, 0x3a, 0x93, 0x9, 0x9b, 0x9a, 0x56, 0x8d, 0xa7, 0xff, 0x1a, 0x96, 0x8e, 0xc8, 0x4e, 0xa2, 0xf6, 0x73, 0x9a, 0x21, 0xb, 0x71, 0x47, 0x8e, 0x12, 0xfb, 0xa9, 0x87, 0x9e, 0x53, 0xc0, 0x9d, 0x32, 0x6f, 0x90, 0x23, 0x90, 0x4e, 0x41, 0x9e, 0x4f, 0x8c, 0x14, 0x31, 0x82}
                            INFO[0000] disconnected
                            panic: reflect: call of reflect.Value.Elem on slice Value
                            ...
                            Zuletzt geändert von MarkusLa; 29.07.2021, 12:26.

                            Kommentar


                              #15
                              Hmm... da scheint beim Lesen der Antwort was schief zu laufen.
                              Nur zur Sicherheit... hast du die letzte Version 0.0.8 ?

                              Ich muss schauen ob ich das irgendwie bei mir reproduzieren kann...

                              Kommentar

                              Lädt...
                              X