Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
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.
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.
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.
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.
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!
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.
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.
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.
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.
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.
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
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.
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.
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)
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.
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.
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.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar