NEWS
Modbus adapter
-
-
@glasfaser said in Modbus adapter:
nimm mal Holding-Register in der Instanz ( kein ALIAS ) , dann 40001 mit int32 , wenn nichts kommt dann das Register rauf oder runter +1 / oder -1
Also 40000 oder 40002Wenn ich das mache bekomme ich immer die Fehlermeldung. Egal ob mit oder ohne Alias. Auch wenn ich beim Holdingregister kleinere Registeradressen vergebe (40 zb.) bekomme ich immer die Fehlermeldung.
Input Register funktioniert über radzio sofort.
@glasfaser said in Modbus adapter:
@klamm-0 sagte in Modbus adapter:
Dokumentation des EM24
Siehe mal in der Suche ...
bzw. hier :
Auch hier geht es darum das der Zähler vorhanden ist und ausgelesen werden soll. Ich will aber den Zähler simulieren.
Das heißt ich mache den ioBroker zum Slave, lege die Register an und fülle diese mit Daten.
Wenn mein Wechselrichter dann auf diese Daten zugreifen will (wie er es beim Zähler auch tun würde), dann soll ioBroker die Werte rausgeben. Anscheinend funktioniert das als Slave nicht wenn die Inputregister größer sind als 65535.
Das könnte daran liegen dass Radzio aus 300001 die 37857 macht oder daran dass der Modbus adapter aus der 300001 nicht die 37857 macht. Ich kenne hierzu halt nicht den Soll
Ich denke also entweder wird aus dem Beispiel RS485 Telegramm 03 00 0B als Adresse genommen (was dann ja deutlich über 35565 liegt) oder der Waveshare übersetzt ganz groben Unfug.
Mir sagt es leider nichts aber hier mal ein tcpdump vom raspberry (iobroker).
IP 170 ist der Waveshare und 166 der Raspberry
Hier ist es GeräteID 3, Funktionscode 3, Register 0100 (dezimal 256) was man im ersten Päckchen auch zum Ende hin sieht.
Vielleicht sieht man daran welche Registeradresse lt. Modbusadapter gelesen werden soll (was dann mit FC3 nicht gemacht wird)09:22:55.558539 IP 192.168.100.170.4197 > 192.168.100.166.4196: Flags [P.], seq 1305343477:1305343489, ack 1863987640, win 3000, length 12 0x0000: e45f 0115 89f8 2861 98ea ccaf 0800 4500 0x0010: 0034 0d70 0000 4006 22b3 c0a8 64aa c0a8 0x0020: 64a6 1065 1064 4dcd f5f5 6f1a 31b8 5018 0x0030: 0bb8 3028 0000 0126 1eb0 0006 0303 0100 0x0040: 0001 09:22:55.558598 IP 192.168.100.166.4196 > 192.168.100.170.4197: Flags [.], ack 1305343489, win 64228, length 0 0x0000: 2861 98ea ccaf e45f 0115 89f8 0800 4500 0x0010: 0028 3781 4000 4006 b8ad c0a8 64a6 c0a8 0x0020: 64aa 1064 1065 6f1a 31b8 4dcd f601 5010 0x0030: fae4 4abc 0000 09:22:55.762428 IP 192.168.100.170.4197 > 192.168.100.166.4196: Flags [.], ack 10, win 3000, length 0 0x0000: e45f 0115 89f8 2861 98ea ccaf 0800 4500 0x0010: 0028 0d71 0000 4006 22be c0a8 64aa c0a8 0x0020: 64a6 1065 1064 4dcd f601 6f1a 31c1 5010 0x0030: 0bb8 5407 0000 0126 3432 0020 09:22:55.664385 IP 192.168.100.166.4196 > 192.168.100.170.4197: Flags [P.], seq 0:9, ack 1, win 64228, length 9 0x0000: 2861 98ea ccaf e45f 0115 89f8 0800 4500 0x0010: 0031 3782 4000 4006 b8a3 c0a8 64a6 c0a8 0x0020: 64aa 1064 1065 6f1a 31b8 4dcd f601 5018 0x0030: fae4 4ac5 0000 0126 1eb0 0003 0383 02
Hier die passende Fehlermeldung aus dem ioboker:
Wenn die Zeitstempel alle passen, dann scheint es auf das erste Telegramm hin einen Fehler zu geben.
Und auf das zweite wird etwas geantwortet (was das zweite Telegramm sein soll weiß ich nicht.)EDIT: Ich habe im inputregister natürlich Adressen angelegt (250-260) und gefüllt mit 1,2,3 bis 11
Als Antwort hätte ich also idealerweise
03 03 01 XX CRC
^^ Gerät
---^^ Funktion
------^^ bytes transferedfür XX dann eine der Zahlen zwischen 1 und 11,
CRC dementsprechend. -
@klamm-0 sagte in Modbus adapter:
Ich will aber den Zähler simulieren.
Warum hast du das nicht das ganz am Anfang deiner Anfrage hier im Thread geschrieben .
Bzw. eventuell habe ich es auch überlesen ... nach deinen Angaben !?
@klassisch verstehst du was er dann möchte !?
-
@glasfaser
Also wörtlich habe ich es nicht geschrieben aber ich fand ich habe es gut erklärt.
Sonst würde ich den IObroker ja auch nicht als Slave haben wollen sondern als Master. -
@klassisch verstehst du was er dann möchte !?
Der Spur nach schon. Aber leider habe ich das noch nie gemacht und kann deshalb nicht wirklich helfen, wie ich oben geschrieben habe. Ich hatte es anfangs auch nicht kapiert.
Mein Verständnis:- Er hat einen Wechselrichter, der einen Zähler (wohl den Carlo Gavazzi EM24) erwartet. Der EM24 arbeitet ja auch mit Victrons zusammen.
- Der Wechselrichter ist Master und will den EM24 per Modbus RTU via TCP abfragen
- Den EM24 gibt es aber nicht. Die benötigten Daten sind aber bereits auf dem ioBroker vorhanden - woher auch immer
- ioBroker soll jetzt Slave sein und dem Wechselrichter einen EM24 vorspielen und ihm die auf dem ioBroker vorhandenen Daten nach Aufforderung zuspielen
-
Genau so ist es.
Die Frage wäre jetzt ob ich irgendwie/irgendwo sehen kann welche Abfrage zu einem Fehler geführt hat. Möglichst genau mit Teilnehmer X hat Y Bytes von Register XYZ abgefragt.
Bin davon ausgegangen, dass ich das im Log mit einstellung Silly sehen kann (ist aber nicht so)oder ob es eine Protokollbeschreibung von Modbus allgemein gibt und ob da drinne steht was passiert wenn die Registerzieladresse größer ist als 65535.Die beötigten Daten sind übrigens schon durch einen Sunny Home Manager 2.0 auf dem ioBroker vorhanden.
bzgl. Modbusbeschreibung. Nach ein bisschen mehr googlen ist klar, dass es maximal FFFF = 65535 Register gibt.
Registeradressen darüber sind nicht möglich. Dass da also ein Fehler im Log steht ist absolut richtig. Schön wäre es, wenn ich sehen könnte warum. -
@klamm-0 Sorry, das einizige, was ich dazu sagen kann ist, daß ich noch nie "silly" benutzt habe, sondern immer nur "debug". Wirst Du aber auch schon getestet haben.
Was dann meiner Meinung nach bleibt, ist ein Ticket in Github
Das Szenario ist durchaus interessant. So könnte man z.B. unter Umständen auch eine vorhandene "moderne Meßeinrichtung" als Wurzelzähler verwenden oder irgendenen anderen (z.B. SDM72), wenn der Carlo Gavazzi nicht verfügbar ist.
Der Rest der Anlage funktioniert dann halt nur bestimmungsgemäß, solange ioBroker läuft.... -
Habe ein Issue in github angelegt.
Vermute nach einigen weiteren recherchen aber eher, dass Funktionscode 3 nicht funktioniert wenn der IObroker der Slave ist.
-
@klamm-0 vielen Dank, bin mal gespant, was dabei herauskommt
-
Die Lösung stand übrigens im Issue 204.
Wenn der Adapter als Slave konfiguriert ist und die Holdingregister abgefragt werden sollen, dann muss ein haken in das Feld poll / Abfrage rein. Damit gehts dann.
Morgen kann ich mich also dran setzten und Alle Holdingregister des Zählers anlegen.
-
Hallo zusammen,
ich habe meine Hargassner Pellet Heizung per ModBus an den IOBroker gekopelt und kann so alle Betriebsdaten auslesen bzw. auch steuern.
Das funktioniert aktuell ohne Probleme.
Allerdings möchte ich jetzt die Wochenprogramme der Heizkreise auslesen.
Die sind in 5 zusammenhängenden HoldingRegsiter hinterlegt, z.b: Startadresse 42055 - 42059
Ich kann aber max. 4 Register im Format Unsigned 64 bit (BigEdian) auslesen (bzw. im Dropdownmenü auswählen)
Wenn ich es als String mit Länge 5 auslese funktioniert es, ich bekomme aber keine Daten (nur Blanks) übergeben.
Gibt es eine Möglichkeit 5 zusammenhängende Register im Dezimal Format auszulesen?
Mit den Programm QModMaster kann ich die Werte sauber auslesen (siehe Bild), aber wie bekomme ich sie so in den IOBroker?
Die Zeiten werden in Minuten ab 00:00 Uhr angegeben (dec.) z.B. Startwert1 --> 360 entspricht also 06:00 Uhr --> 6h60 + 0m0 = 360 -
Hallo!
Ich bin schon um einiges weiter gekommen aber stehe vor dem nächsten Problem:
Der Modbusadapter ist als Slave mit der Geräte ID 1 eingerichtet.
Verbindung passt und Werte kann ich auch abfragen.
Problem: Der Modbus Adapter antwortet auf alle ID´s, die auf der IP und dem Port kommen.
Ist auch in Radzio! schön zu sehen. Unabhängig davon welche Geräte ID ich eintippe es wird immer der gleiche Wert ausgegeben.
Ich möchte aber eigentlich nur dieses eine Gerät simulieren. Alle anfragen für andere Geräte ID´s sollen einfach unbeantwortet bleiben.Gibts dafür eine Lösung oder soll ich ein Issue auf Github öffnen?
-
Hallo zusammen,
ich habe auch eine Modbus Karte genau wie @chinaboy in meinem Nano.
Nun habe ich die neueste Firmware an meinem Nano geflasht V14.0n2, hier kann man nun sich die Liste erstellen lassen was man alles auslesen kann.
Jetzt kommen bei mir keine Werte mehr an, kann der Adapter das auslesen? Wenn ja kann einer mal anhand einer Adresse ein Beispiel zeigen?Danke
-
@acidsubway
Servus,
Das sind meine Einstellungen vom Adapterund das die Einstellungen von Holding Register:
Du musst aus deiner CSV Datei in der Spalte Alternative Register die Adresse nehmen und 40000 dazu addieren, das ist dann die richtige Adresse.
Mach mal am Anfang nur einen Wert rein bei den Holding Registern (z.B. 40001) und schau ob der Adapter grün wird. -
-
Danke das klappt, ich wollte schon immer aus meinem ioBroker dem Kessel die Raumtemperatur mitteilen.
Wie machst du das?MfG
-
@acidsubway
Hab ich leider auch noch nicht umgesetzt, lese momentan nur Werte aus. -
@chinaboy
wenn er die Raumtemperatur kennt, schaltet er die Pumpen ab.Jetzt ist ein anderes Problem aufgetaucht, der QMod bekommt den Wert von Puffer oben her aber, aber der Adapter bleibt leer mit Fehlern´bei dem Wert, warum ?
bitte um Hilfe
-
Hi,
ich habe aktuell auch einen ähnlichen Anwendungsfall wie du.
Ich möchte der Wärmepumpe die IST-Leistung am Einspeisepunkt vorgeben ohne einen extra Zähler mit Modbus-Interface nur für die WP zu setzen.Kannst du bei Gelegenheit bitte noch die Einstellungen vom Waveshare Gateway hier bekannt machen?
Ich bin leider noch nicht so weit, dass eine Kommunikation zwischen IObroker und Gateway besteht.Gruß
Michael
-
Hallo Leute,
ich versuche gerade einen Ultraschall-Durchflussmesser mittels Modbus-RTU in den ioBroker zu integrieren. Leider kann ich keine Verbindung aufrechterhalten.
Folgende Fehlermeldungen bekomme ich:
modbus.1
2022-09-29 21:09:05.268 error Error response: fcmodbus.1
2022-09-29 21:09:02.841 error Error response: 7fmodbus.1
2022-09-29 21:10:12.813 error Error response: f0modbus.1
2022-09-29 21:10:10.401 error Error response: 80modbus.1
2022-09-29 21:10:08.860 error Error response: feDie Instanz springt von grün auf gelb.
In der Anleitung (https://images-na.ssl-images-amazon.com/images/I/91CvZHsNYBL.pdf) des Geräts steht folgendes:
Abrufen will ich ein HOLDING Register (40001)
Habe auch schon 40000 und 40002 sowie alle Möglichkeiten und "Typ" ausprobiert (signed32 .....) Aber laut Anleitung des Geräts scheint FLOAT wohl das richtige zu sein.Kann es sein, dass hier HEX und DEZ irgendwie nicht zusammenpassen?
Was kann ich noch probieren? Sagen die Errors im Log überhaupt etwas aus?Würde mich über einen Rat sehr freuen.
Vielen Dank im Voraus
Matthias