Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS19001586 ModBus Read GENERIC

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

    #31
    Zitat von saegefisch Beitrag anzeigen
    Zum Bit-Typ: die Nomenklatur zu meinem LBS braucht "bit_00"bis bit_15". also z.B. (oder entsprechend als JSON)
    Das Ansprechen eines bestimmten bits in einem Register scheint zu funktionieren. Aktuell lese ich das EMS-Register mit seinen insgesamt 7 bits aus. Momentan frage ich meine Werte mittels String im CSV-Format ab.

    Sobald die Batterie wieder geladen werden kann, werde ich mir die Ausgabe noch einmal genauer anschauen.
    Zuletzt geändert von ChrisChros; 27.05.2021, 21:44.

    Kommentar


      #32
      Hallo saegefisch,

      danke für deine Hilfe. Ich habe das Logging dekommentiert. Leider ist hier die Ausgabe auch "leer":
      Code:
      2021-05-27 21:39:05 760066 13644 debug LBS19001586 [v0.3]: Modus Read GENERIC EXEC Daemon start initiated (75)
      2021-05-27 21:39:05 761255 13644 debug LBS19001586 [v0.3]: Modus Read GENERIC LBS ended (75)
      2021-05-27 21:39:05 889271 13653 debug EXE19001586 [v0.3]: Daten wurden als CSV geliefert (75)
      2021-05-27 21:39:05 890166 13653 debug EXE19001586 [v0.3]: data_array: (75)
      2021-05-27 21:39:05 890232 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:05 890291 13653 debug EXE19001586 [v0.3]: ["40001","EnergieBezug","uint32"]
      2021-05-27 21:39:05 890316 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:05 891026 13653 debug EXE19001586 [v0.3]: Register: (75)
      2021-05-27 21:39:05 891077 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:05 891104 13653 debug EXE19001586 [v0.3]: [{"address":"40001","name":"EnergieBezug","type":"u int32","uri":"10.10.10.17:502","unitId":1}]
      2021-05-27 21:39:05 891129 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:05 897744 13653 debug EXE19001586 [v0.3]: Anzahl Register gesamt angefragt: 1 (75)
      2021-05-27 21:39:05 899209 13653 debug EXE19001586 [v0.3]: Anzahl Requests ergeben sich gesamt: 1 (75)
      2021-05-27 21:39:05 900697 13653 debug EXE19001586 [v0.3]: Anzahl Requests in Chunk 1 : 1 (75)
      2021-05-27 21:39:06 022284 13653 debug EXE19001586 [v0.3]: Response Daten: (75)
      2021-05-27 21:39:06 022387 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:06 022414 13653 debug EXE19001586 [v0.3]: []
      2021-05-27 21:39:06 022439 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:06 023040 13653 debug EXE19001586 [v0.3]: Response: (75)
      2021-05-27 21:39:06 023086 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:06 023113 13653 debug EXE19001586 [v0.3]: {}
      2021-05-27 21:39:06 023135 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:06 434458 13653 debug EXE19001586 [v0.3]: unerwünscht: (75)
      2021-05-27 21:39:06 434591 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:06 434624 13653 debug EXE19001586 [v0.3]: ["-2147483648","2147483648","4026531840","4294967295"]
      2021-05-27 21:39:06 434649 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:06 435548 13653 debug EXE19001586 [v0.3]: Ersatz: (75)
      2021-05-27 21:39:06 435610 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT START ================
      2021-05-27 21:39:06 435636 13653 debug EXE19001586 [v0.3]: "0"
      2021-05-27 21:39:06 435658 13653 debug EXE19001586 [v0.3]: ================ ARRAY/OBJECT END ================
      2021-05-27 21:39:06 441611 13653 debug EXE19001586 [v0.3]: JSON: [] (75)
      Bei der IP dem Port und der Slave ID bin ich mir relativ sicher ja. Ein andere LBS funktioniert einwandfrei. Auch mit dem Tool Simple Modbus TCP Client kann ich die Daten entsprechend abrufen. Bzgl. dem Endian steht in der Doku "High Byte first". Ich hab aber alle 4 Einstellungen durchgetestet. Bei allen das gleiche Ergebnis.
      Was meinst du mit der Scriptlösung?

      Noch eine andere Frage. Dein LBS frägt ja aktuell mit FC3 die Register ab. Möchte man auf FC4 (ReadInputRegisters) umstellen. Ich hab leider noch nicht tiefer in deinen Code schauen können aber auf den ersten Blick müsste man das in deinem LBS nur an der einen Stelle ändern oder?
      Code:
      //
      // Library: Register setzen (einmalig) -> für geänderte Register muss der LBS angehalten und neu gestartet werden
      //
      try {
      $fc3 = ReadRegistersBuilder::newReadHoldingRegisters() // Library: Register parametrisieren
      ->allFromArray($registers)
      ->build();
      }
      Ich hab noch einen zweiten Stromzähler (PV Anlage). Der erwartet eine Abfrage mit FC4.

      Viele Grüße
      Hias
      Zuletzt geändert von h1as; 27.05.2021, 21:18.

      Kommentar


        #33
        Zitat von ChrisChros Beitrag anzeigen
        saegefisch
        So wirklich konsistent ist das alles nicht.
        Bisher bei allen Int32 Registern muss ich -2 rechnen. Bei den Uint16 Werten passen einige Register wie in der Dokumentation angegeben, andere Register mit Datentyp Unit16 muss ich -1 rechnen.

        Ich werde das ganze mal noch mit dem Modbus Adapter im ioBroker testen ob sich das hier ähnlich verhält.
        Wäre klasse, wenn Du das erklärbar machen könntest. Ich kann's gerade nicht, denn ich kann's nicht reproduzieren; habe derlei mit meinen Geräten noch gar nicht gehabt. Da passt Register in der Doku zum Ergebnis im LBS (oder auch der Library pur). Wenn Du es erklären kannst oder jemand anderes mit gleichen Symptomen, schreibe ich gerne eine spezifische Info in die LBS-Hilfe.
        Immerhin ist das Probieren im LiveView ja dafür auch eine große Hilfe ohne Neuaktivierung.

        Zitat von ChrisChros Beitrag anzeigen
        Das Ansprechen eines bestimmten bits in einem Register scheint zu funktionieren. Aktuell lese ich das EMS-Register mit seinen insgesamt 7 bits aus. Momentan frage ich meine Werte mittels String im CSV-Format ab.

        Sobald die Batterie wieder geladen werden kann, werde ich mir die Ausgabe noch einmal genauer anschauen.
        Ganz lieben Dank für's testen. Dann kann ich das jetzt als "funktioniert offenbar " abhaken...
        Zuletzt geändert von saegefisch; 28.05.2021, 19:17.

        Kommentar


          #34
          Zitat von h1as Beitrag anzeigen
          Dein LBS frägt ja aktuell mit FC3 die Register ab. Möchte man auf FC4 (ReadInputRegisters) umstellen.
          Weiß gar nicht, ob meine Geräte auch FC4 haben. Ich schaue mal. Du kannst es ja mal selber schon mal vorab versuchen.

          In diesem Abschnitt:
          Code:
          //
          // Library: Register setzen (einmalig) -> für geänderte Register muss der LBS angehalten und neu gestartet werden
          //
          try {
          $fc3 = ReadRegistersBuilder::newReadHoldingRegisters() // Library: Register parametrisieren
          ->allFromArray($registers)
          ->build();
          könnte es reichen, newReadHoldingRegisters gegen newReadInputRegisters zu tauschen. Ein Versuch ist's wert. Wenn das auch geht, würde ich beides im LBS anbieten - aber nur lesend. Schreiben ist noch eine andere Nummer.

          > Könnte es sein, dass Deine Register alle FC4 sind und wir daher nix bekommen? Anderes kann ich es garde nicht verstehen, wenn IP, Port und ID stimmen. Es könnte ja falsche Werte geben oder Null-Werte. Aber gar nichts. Das erklärt sich für mich nicht aus der Ferne.

          Nachtrag: Hab's mal getestet. Mit der Änderung liefert mir der LBS die gleichen Werte wie vorher. Ist also für mich völlig transparent. Bin gespannt auf Deine Rückmeldung...

          Nachtrag 2: Wohl möglich deuten Deine 4xxxx bereits auf Input-Register hin. Hatte ich noch nicht mit Details zu Modbus tiefer beschäftigt, weil die Library einem ja alles "schenkt". Und meine ModbuxGeräte auch Werte für die wenigen von mir abgefragten 4xxxx-Register mit "Holding" liefern - sonst wär' ich da vielleicht auch schon drüber gestolpert.
          Daher denke ich, dass die Änderung auf "Input" Dir Ergebnisse liefern wird!


          Zitat von h1as Beitrag anzeigen
          Was meinst du mit der Scriptlösung?
          Das Thema hat doch erst 3 Seiten... ... aber okay: hier...
          Zuletzt geändert von saegefisch; 28.05.2021, 19:41.

          Kommentar


            #35
            Zitat von saegefisch Beitrag anzeigen
            Das Thema hat doch erst 3 Seiten... ... aber okay: hier...
            Schande über mein Haupt. Das hab ich glatt überlesen

            Dafür weiß ich jetzt wo es bei mir hackt. Es scheint so, dass der Modbus Library die Adresse bereits mit abgezogenem Offset übergeben werden muss. In meinem Fall steht z.B. in Register 40001 der Zählerwert für die bezogene Energie (uint32). Wenn ich nun dem Script 40001 als Adresse übergebe, bekomme ich als Fehlercode "Illegal Adress") Wenn ich dagegen als Adresse 0 einstelle (40001 minus Offset 40001) dann bekomme ich die Werte ausgelesen.

            Das mit dem 2. Zähler und FC4 teste ich gleich noch.

            Kommentar


              #36
              Ich habe eine neu Version 0.4 bereit gestellt. Mit dem neuen E18 kann man nun wählen, mit welcher Methode FC3 = HOLDING oder FC4 = INPUT gelesen werden soll. Bitte mal testen, ob damit Deine Register liefern (mit E18 = 4).

              Für alle, bei denen es bisher ging, ändert sich nichts mit dem Update: Der Default ist so gesetzt, dass alles unverändert weiter geht.

              Ebenso ist der Bug mit E9 = 3 gefixt (Angabe 3 hat den LBS sofort beendet)
              Zuletzt geändert von saegefisch; 28.05.2021, 22:14.

              Kommentar


                #37
                Zitat von saegefisch Beitrag anzeigen
                Wäre klasse, wenn Du das erklärbar machen könntest.
                Momentan kann ich das leider nicht, verstehe es selbst nicht.
                Eventuell kann WagoKlemme etwas dazu sagen, er kann ja mit seinem LBS das E3DC erfolgreich auslesen.

                Kommentar


                  #38
                  Irgendwie bin ich von der Doku von SMA dazu verwöhnt, weil ich da die Werte alle 1:1 verwenden konnte; vielleicht hat SMA das bereits für die Kunden eingerechnet. Das scheinen andere Hersteller anders zu lösen. Aber ich kann und mag mir dazu kein Urteil erlauben, weil ich es aus der Ferne nicht beurteilen kann. Vielleicht hat das gute Gründe, die ich nicht kenne.

                  Vielleicht kann Armin uns da tatsächlich helfen es besser zu verstehen. vielleicht kann man meinen LBS noch sinnvoll ergänzen, damit er das besser löst. Vielleicht einen Eingang E19 "Register Offset"
                  • 0 --> kein Offset (z.B. SMA)
                  • A --> Auto = Registerlänge wird vom Register abgezogen, also bei uint16/int16 mit "-1", bei uint32/int32 mit "-2" (z.B. E8 mit 40068 wird zu tatsächlich abgefragtem 40066). Für alle anderen Typen bräuchte ich noch das richtige Regelwerk für den Offset von Euch.
                  Zuletzt geändert von saegefisch; 28.05.2021, 22:17.

                  Kommentar


                    #39
                    saegefisch
                    so ich habe mir mal den Spaß gemacht und die modbus Schnittstelle im ioBroker installiert und dort die ganzen Register eingetragen. Dort muss ich keinen Offset oder so beachten und bekomme die ganzen Daten.
                    Hier mal die Liste mit den Registern, vlt. hilft das weiter.

                    Kommentar


                      #40
                      Hallo
                      Zitat von saegefisch Beitrag anzeigen
                      Ich habe eine neu Version 0.4 bereit gestellt. Mit dem neuen E18 kann man nun wählen, mit welcher Methode FC3 = HOLDING oder FC4 = INPUT gelesen werden soll. Bitte mal testen, ob damit Deine Register liefern (mit E18 = 4).
                      Ich habe heute die V0.4 getestet. Sowohl die FC3 als auch die FC4 funktioniert perfekt. Danke dir! Bei meinem 2. Zähler sind alle Werte Datentyp float. Auch das funktioniert!

                      Das mit dem Offset bei den Adressen ist so dass ich bei den Registern immer 40001 bzw. 30001 abziehen muss. Möchte ich also Register 40001 auslesen muss ich dem LBS Adresse 0 übergeben, 40007 wäre dann 6. Aber damit kann ich leben. Man muss es nur wissen

                      Kommentar


                        #41
                        h1as : Danke für Deine Rückmeldungen zu FC3 und FC4, aber auch float. Damit funktioniert E18 offenbar gut und richtig, das freut mich. Den Typ float kann ich für mich dann auch als "getestet" abhaken.

                        Zum Offset: Es scheint ja offenbar 3 verschiedene "Systeme" zu geben:
                        • 1:1 kann ein Register aus der Doku verwendet werden (z.B. SMA) -> Kein Offset erforderlich
                        • Offset abhängig vom Typ -> Je nach Registerlänge muss -1 oder -2 oder 0 abgezogen werden von den Registerangaben in der Doku des Herstellers
                        • Fester Offset --> ein fester Offset z.B. -40001 ist abzuziehen von den Registerangaben in der Doku des Herstellers
                        @h1as: Verstehe ich das richtig mit dem wählbaren, aber dann festen Offset? Oder gibt es bei Deinem Gerät auch den Bedarf, dass der Offset zusätzlich noch nach dem Typ adjustiert werden muss?

                        ChrisChros Dein Link hat ja weiter rechts auch eine Offset-Spalte. Aufgrund der gemachten Erfahrungen halte ich es für unwahrscheinlich, dass ioBrocker das anders macht, die waren nur schon weiter mit gemachten Erfahrungen wie andere spezifische LBS hier auch schon: Die kochen ja auch mit Wasser... Aber ist ja kein Ding. Es wäre halt spannend zu wissen, was mit den anderen Typen ist: xxxx32 = -2, xxxxx16 = -1, fraglich ist float, Byte, Bit. Bei Byte und Bit vermutlich = 0. Bei float, keine Ahnung, wie lang das ist

                        Wenn es keine Kombination aus festem Offset UND Typen-Abhängig, würde ich meinen letzten Vorschlag mal in eine V0.5 kippen mit E19:
                        • E19 = 0 -> kein Offset
                        • E19 = <+/-Wert> -> fester Offset
                        • E19 = A -> Typ-abhängiger Offset -2, -1, 0
                        • zur Not halt noch E19 = A<+/-Offset> für die Kombination
                        Scheint Euch das plausibel und zielführend für Eure Gerätschaften? Oder anders! Lohnt der Einbau? Mit eurer Rückmeldung entscheide ich dann, ob und wie.

                        Darf ich annehmen, dass jeder Offset IMMER negativ ist? Dann können wir uns die Vorzeichen sparen auch bei der Angabe E19.
                        Zuletzt geändert von saegefisch; 01.06.2021, 20:30.

                        Kommentar


                          #42
                          Zitat von saegefisch Beitrag anzeigen
                          Scheint Euch das plausibel und zielführend für Eure Gerätschaften? Oder anders! Lohnt der Einbau? Mit eurer Rückmeldung entscheide ich dann, ob und wie.
                          Ich denke es wäre zumindest einen Versuch wert.
                          Wenn du möchtest, kannst du mir auch eine Vorabversion schicken und ich teste das dann mal bei mir. E3DC scheint ja doch etwas spezieller zu sein.

                          Kommentar


                            #43
                            Version V0.5 kommt mit neuem Eingang E19 zur Festlegung eines Register-Offsets entweder 0 oder statisch oder typ-basiert (Automatisch) oder eine Kombination von A und Wert sind möglich (Siehe folgendes Beispiel E19 = "A-10" mit 3x Register, davon 1 mit 16, 32 oder 64)

                            Code:
                            ...
                            2021-06-03 23:59:17 841888 14827 debug EXE19001586 [v0.5]: Konstanter Offset angewendet: 30775 -> 30765 (150)
                            2021-06-03 23:59:17 842389 14827 debug EXE19001586 [v0.5]: Konstanter Offset angewendet: 30517 -> 30507 (150)
                            2021-06-03 23:59:17 842866 14827 debug EXE19001586 [v0.5]: Konstanter Offset angewendet: 30513 -> 30503 (150)
                            2021-06-03 23:59:17 843369 14827 debug EXE19001586 [v0.5]: Typ Offset angewendet (int32): 30765 -> 30763 (150)
                            ...
                            h1as und ChrisChros : Bitte mal testen. Wenn erfolgreich gerne auch ergänzende Infos spezifisch für Eure Geräte für die LBS-Hilfe zuliefern. Nehme ich gerne auf.

                            Für Typ "float" wird derzeit keine Typ-Offset gemacht: Ich wäre dankbar über Meinungen oder Fakten dazu. Kann ich rasch nachliefern, wenn erforderlich. Ebenso für byte oder bit, aber dort erwarte ich auch keinen Offset; bei float bin ich unsicher.
                            Zuletzt geändert von saegefisch; 03.06.2021, 23:49.

                            Kommentar


                              #44
                              Zitat von saegefisch Beitrag anzeigen
                              ChrisChros Dein Link hat ja weiter rechts auch eine Offset-Spalte. Aufgrund der gemachten Erfahrungen halte ich es für unwahrscheinlich, dass ioBrocker das anders macht, die waren nur schon weiter mit gemachten Erfahrungen wie andere spezifische LBS hier auch schon: Die kochen ja auch mit Wasser... Aber ist ja kein Ding. Es wäre halt spannend zu wissen, was mit den anderen Typen ist: xxxx32 = -2, xxxxx16 = -1, fraglich ist float, Byte, Bit. Bei Byte und Bit vermutlich = 0. Bei float, keine Ahnung, wie lang das ist
                              Also ich habe mir die Liste mal aufbereitet und dabei ist aufgefallen, dass in der Liste zwar eine Spalte für einen Offset angegeben ist, aber alle Werte einen Offset = 0 haben.
                              Ich werde aber dein Update am Wochenende mal test und Feedback geben.
                              Angehängte Dateien

                              Kommentar


                                #45
                                ChrisChros : Sorry, jetzt muss ich Dir das mal sagen: Ich weiß nicht, was Du mir wiederholt mit der Art Deinen Rückmeldungen sagen willst. Ist es Deine Gnade, dass Du es "aber" mal versuchen möchtest? Was willst Du mir beweisen, dass der Offset dort mit = 0 notiert ist bei der anderen Lösung ist? Habe ich schon am gleichen Tag nach Deinem Link gesehen. Nur weil eine Bahn nur einen Stromabnehmer hat, fährt sie dennoch mit einem Stromkreis... nur weil Du etwas nicht siehst, werden erforderliche Dinge wohl "irgendwie" da sein und irgendwann dort mal hingekommen sein. Diese Lernkurve gehen wir gerade erst. So werden offenbar alle Dir bekannten Lösungen, die mit Deinem ModBus-Gerät klar kommen, irgendwie "unter der Haube" diese Offsets einrechnen. Es scheint mir unlogisch zu glauben, sie täten es nicht. Weil eben alle mit dem gleichen Wasser kochen. Vielleicht arbeitet die Bibliothek anders. Egal, alles hat seinen Preis, sie hat andere Vorteile. Es ist doch auch völlig egal, wenn am Ende die Ergebnisse verlässlich stimmen, oder?!?

                                Ich mache Dir und allen dieses Angebot. Und das sehr gerne! Und aus mehreren Gründen aus Überzeugung! Wenn Es Dir Mühe macht, meinen generischen LBS zu verwenden, dann verwende bitte unbedingt einen anderen. Wenn Du ehrlich Interesse hast, dann lass' uns positiv und gemeinsam weiter daran arbeiten, dass dieser generische LBS unterschiedliche Geräte abdeckt. Daher kann das Einrechnen von Offsets hier auch nicht "unter der Haube" geschehen, wie Du es gewohnt bist. Dies ist der Preis eines generischen Ansatzes. Und ich freue mich und danke Dir herzlich, wenn Du es bei Gelegenheit testest und mir eine Rückmeldung gibst. Das wäre klasse.

                                VG,
                                Carsten
                                Zuletzt geändert von saegefisch; 05.06.2021, 01:04.

                                Kommentar

                                Lädt...
                                X