NEWS
Tasmota ModBusBridge Testen?
-
Hi
habe für eine ModBus TCP Bridge zu MQTT heute zum ersten mal dazu Tasmota aufgsetzt und mit den entsprechenden Parametern kompiliert und auf einem ESP32 installiert.
Nun simuliere ich einen Modbus TCP Master auf meinem Windows Desktop:

und versuche Werte zB hier das erste Holding Register zu lesen.
Die Verbindung von Tasmota (Modbus Client) baut er (auch wenn nur kurzweilig) erfolgreich auf und meldet es per Mqtt:16:41:40.432 CMD: ModbusTCPConnect 502,192.168.0.50 16:41:40.433 SRC: WebConsole from 192.168.0.50 16:41:40.435 CMD: Grp 0, Cmd 'MODBUSTCPCONNECT', Idx 1, Len 16, Pld 502, Data '502,192.168.0.50' 16:41:40.439 TCP: MBS: MBRTCP Connecting to 192.168.0.50 on port 502 16:41:40.455 TCP: MBS: MBRTCP connected! 16:41:40.460 MQT: stat/tasmota_4A211C/RESULT = {"ModbusTCPConnect":"Done"}Möchte ich aber Werte lesen, passiert nicht viel:
16:45:32.862 CMD: ModBusSend {"deviceaddress": 1, "functioncode": 3, "startaddress": 40001, "type":"uint16", "count":1} 16:45:32.863 SRC: WebConsole from 192.168.0.50 16:45:32.864 CMD: Grp 0, Cmd 'MODBUSSEND', Idx 1, Len 90, Pld -99, Data '{"deviceaddress": 1, "functioncode": 3, "startaddress": 40001, "type":"uint16", "count":1}' 16:45:32.878 MQT: stat/tasmota_4A211C/RESULT = {"ModbusSend":"Done"}Es fehlen die gelesen Werte im Ergebnis wie zB
RESULT = {"ModbusReceived":{"DeviceAddress":1,"FunctionCode":3,"StartAddress":1,"Length":13,"Count":4,"Values":[65282,65028,65280,65024]}}Was dann natürlich auch nicht per Mqtt im IObroker erscheint.
Seht ihr den Fehler? Egal was ich als Anfrage schicke und ohne Fehler versendet wird. Ich bekomme nie ein ModBusReceived zurück.
Thx!
-
Hi
habe für eine ModBus TCP Bridge zu MQTT heute zum ersten mal dazu Tasmota aufgsetzt und mit den entsprechenden Parametern kompiliert und auf einem ESP32 installiert.
Nun simuliere ich einen Modbus TCP Master auf meinem Windows Desktop:

und versuche Werte zB hier das erste Holding Register zu lesen.
Die Verbindung von Tasmota (Modbus Client) baut er (auch wenn nur kurzweilig) erfolgreich auf und meldet es per Mqtt:16:41:40.432 CMD: ModbusTCPConnect 502,192.168.0.50 16:41:40.433 SRC: WebConsole from 192.168.0.50 16:41:40.435 CMD: Grp 0, Cmd 'MODBUSTCPCONNECT', Idx 1, Len 16, Pld 502, Data '502,192.168.0.50' 16:41:40.439 TCP: MBS: MBRTCP Connecting to 192.168.0.50 on port 502 16:41:40.455 TCP: MBS: MBRTCP connected! 16:41:40.460 MQT: stat/tasmota_4A211C/RESULT = {"ModbusTCPConnect":"Done"}Möchte ich aber Werte lesen, passiert nicht viel:
16:45:32.862 CMD: ModBusSend {"deviceaddress": 1, "functioncode": 3, "startaddress": 40001, "type":"uint16", "count":1} 16:45:32.863 SRC: WebConsole from 192.168.0.50 16:45:32.864 CMD: Grp 0, Cmd 'MODBUSSEND', Idx 1, Len 90, Pld -99, Data '{"deviceaddress": 1, "functioncode": 3, "startaddress": 40001, "type":"uint16", "count":1}' 16:45:32.878 MQT: stat/tasmota_4A211C/RESULT = {"ModbusSend":"Done"}Es fehlen die gelesen Werte im Ergebnis wie zB
RESULT = {"ModbusReceived":{"DeviceAddress":1,"FunctionCode":3,"StartAddress":1,"Length":13,"Count":4,"Values":[65282,65028,65280,65024]}}Was dann natürlich auch nicht per Mqtt im IObroker erscheint.
Seht ihr den Fehler? Egal was ich als Anfrage schicke und ohne Fehler versendet wird. Ich bekomme nie ein ModBusReceived zurück.
Thx!
Zur Info, ein Kommentar des Entwicklers gab Aufschluß. Für die ModBusBridge von Tasmota muß eine serielle Verbindung (zB zum RS485 Konverter) beteiligt sein. Ob die dann zu ModBus TCP oder Mqtt spricht ist beides möglich aber reine Lösungen über Ethernet wie mein Testsetup sind nicht vorgesehen.
-
Hallo, ich möchte das Thema gerne noch mal aufmachen, weil ich denke das es oft Anwendungfälle gibt, wo man ,mittels eines ESP8266 oder ESP32, Tasmota und iobroker eine gute lösung für eine Modbus TCP IP verbindung schaffen kann.
Ich muss nur sagen, dass ich aus der Doku nocht so richtig schlau werde deshalb die Frage: Sollte es generell funktionieren, das man ein Gerät welches Modbus RTU spricht ( egal ob über RS232 oder RS485) mit der Tasmota Modbus Bridge und dem Modbus Adapter in den IOBroker ingetriert?
Wenn ja auf was muss man genau aufpassen, und wie konfiguriert man das genau?
vG Etze
-
Hallo, ich möchte das Thema gerne noch mal aufmachen, weil ich denke das es oft Anwendungfälle gibt, wo man ,mittels eines ESP8266 oder ESP32, Tasmota und iobroker eine gute lösung für eine Modbus TCP IP verbindung schaffen kann.
Ich muss nur sagen, dass ich aus der Doku nocht so richtig schlau werde deshalb die Frage: Sollte es generell funktionieren, das man ein Gerät welches Modbus RTU spricht ( egal ob über RS232 oder RS485) mit der Tasmota Modbus Bridge und dem Modbus Adapter in den IOBroker ingetriert?
Wenn ja auf was muss man genau aufpassen, und wie konfiguriert man das genau?
vG Etze
@etzeste13 sagte in Tasmota ModBusBridge Testen?:
Ich muss nur sagen, dass ich aus der Doku nocht so richtig schlau werde deshalb die Frage: Sollte es generell funktionieren, das man ein Gerät welches Modbus RTU spricht ( egal ob über RS232 oder RS485) mit der Tasmota Modbus Bridge und dem Modbus Adapter in den IOBroker ingetriert?
Ja generell funktioniert es wenn es ein Modbus RTU Client/Slave ist. Die Tasmota Brücke ist lediglich ein Konverter der von Modbus TCP (zB IObroker Adapter) auf die GPIOs des ESP konvertiert (TTL Signal) wo ein TTL RS485 Konverter angeschlossen ist.
Die Tasmota konfiguration daher eher universeller und es braucht eine eigene Kompilierung da die Modbus-Brücke nicht im Standardumfang von Tasmota enthalten ist. Danach konfiguiert man noch eine Regel die die Brücke automatisch startet und ist damit quasie fertig.
Eine TCP Anfrage auf Port 502 wird 1:1 also die Registeradresse dann auf RTU umgesetzt und die Antwort wieder an TCP geliefert.
-
@etzeste13 sagte in Tasmota ModBusBridge Testen?:
Ich muss nur sagen, dass ich aus der Doku nocht so richtig schlau werde deshalb die Frage: Sollte es generell funktionieren, das man ein Gerät welches Modbus RTU spricht ( egal ob über RS232 oder RS485) mit der Tasmota Modbus Bridge und dem Modbus Adapter in den IOBroker ingetriert?
Ja generell funktioniert es wenn es ein Modbus RTU Client/Slave ist. Die Tasmota Brücke ist lediglich ein Konverter der von Modbus TCP (zB IObroker Adapter) auf die GPIOs des ESP konvertiert (TTL Signal) wo ein TTL RS485 Konverter angeschlossen ist.
Die Tasmota konfiguration daher eher universeller und es braucht eine eigene Kompilierung da die Modbus-Brücke nicht im Standardumfang von Tasmota enthalten ist. Danach konfiguiert man noch eine Regel die die Brücke automatisch startet und ist damit quasie fertig.
Eine TCP Anfrage auf Port 502 wird 1:1 also die Registeradresse dann auf RTU umgesetzt und die Antwort wieder an TCP geliefert.
@Dieter_P
Hallo und vielen, vielen Dank für dein Feedback. Grundsätzlich hätte ich das auch so verstanden, aber auch nachdem ich die Dokus mehrmals gelesen habe bleiben für mich noch ein paar Detail-Fragen offen. Vielleicht kannst du mir auch hier ein paar Tipps geben.Dann fasse ich das mal kurz zusammen und erkläre dir anhand meines Anwendungsfalles wie ich es angehen würde. Bitte lass mich wissen, wenn da ein Fehler drinnen ist:
- eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
- die Version auf einen ESP8266 aufspielen
- GPIO1 auf ModBr Tx und GPIO3 auf ModBr Rx stellen
- Ich brauch Modbus RTU über RS232 ( für Fronius S3200 Steuerung) [https://forum.iobroker.net/assets/uploads/files/1577795130910-b1200419_modbus-lambdatronic-3200_50-04_05-17_de.pdf] deshalb würde ich dann die TTL Signale vom ESP auf einen TTL-RS232 Converter schalten. Wie soll hier die Verkabelung sein? muss ich den ModBr Rx auf den Rx vom TTL-RS232 converter verbinden oder auf den TX? Weist du wie hier die Logik von Tasmota ist?
- Wie wäre die Regel um die die Bridge richtig zu aktivieren? Und welch ein Command ist zu verwenden? Laut dieser Doku gibt es 2 Möglichkeiten, wobei mir der Unterschied nicht klar ist?
Ist ModbusTCPStart <PortNr>oderModbusTCPConnect <PortNr>, <ip_Adresse-Tasmota>zu verwenden? - Muss ich auf Tasmota auch mittels einer Rule immer die Baudrate für die RS232 Verbindung setzen. Wie komme ich hier in meinem Fall immer auf die 57600baud bei 8N1? Wie wäre hier die passende Rule?
- Wie ist dann der Iobroker Adapter richtig zu konfigurieren? Muss ich dann den
TCPoder denRTU over TCPMode wählen?
Ich hoffe hier keine alzu "dummen" Fragen zu stellen. Diese Dinge konnte ich wie gesagt nicht rauslesen, und wenn du das schon mal gemacht hast würde ich mich freuen, wenn du deine Erfahrung mit mir teilst.... ;-)
Danke und vG
Etze - eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
-
@Dieter_P
Hallo und vielen, vielen Dank für dein Feedback. Grundsätzlich hätte ich das auch so verstanden, aber auch nachdem ich die Dokus mehrmals gelesen habe bleiben für mich noch ein paar Detail-Fragen offen. Vielleicht kannst du mir auch hier ein paar Tipps geben.Dann fasse ich das mal kurz zusammen und erkläre dir anhand meines Anwendungsfalles wie ich es angehen würde. Bitte lass mich wissen, wenn da ein Fehler drinnen ist:
- eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
- die Version auf einen ESP8266 aufspielen
- GPIO1 auf ModBr Tx und GPIO3 auf ModBr Rx stellen
- Ich brauch Modbus RTU über RS232 ( für Fronius S3200 Steuerung) [https://forum.iobroker.net/assets/uploads/files/1577795130910-b1200419_modbus-lambdatronic-3200_50-04_05-17_de.pdf] deshalb würde ich dann die TTL Signale vom ESP auf einen TTL-RS232 Converter schalten. Wie soll hier die Verkabelung sein? muss ich den ModBr Rx auf den Rx vom TTL-RS232 converter verbinden oder auf den TX? Weist du wie hier die Logik von Tasmota ist?
- Wie wäre die Regel um die die Bridge richtig zu aktivieren? Und welch ein Command ist zu verwenden? Laut dieser Doku gibt es 2 Möglichkeiten, wobei mir der Unterschied nicht klar ist?
Ist ModbusTCPStart <PortNr>oderModbusTCPConnect <PortNr>, <ip_Adresse-Tasmota>zu verwenden? - Muss ich auf Tasmota auch mittels einer Rule immer die Baudrate für die RS232 Verbindung setzen. Wie komme ich hier in meinem Fall immer auf die 57600baud bei 8N1? Wie wäre hier die passende Rule?
- Wie ist dann der Iobroker Adapter richtig zu konfigurieren? Muss ich dann den
TCPoder denRTU over TCPMode wählen?
Ich hoffe hier keine alzu "dummen" Fragen zu stellen. Diese Dinge konnte ich wie gesagt nicht rauslesen, und wenn du das schon mal gemacht hast würde ich mich freuen, wenn du deine Erfahrung mit mir teilst.... ;-)
Danke und vG
Etze@etzeste13
Hi komme leider erst später dazu dir ausführlich zu antworten aber alles kein Hexenwerk aber die Doku war für mich genauso unbrauchbar und hab mich dadurch getestet, aber das muss ja nicht sein 😉.Frage Vorweg dein Link zur RS232 Info funktioniert nicht, da ich nur RS485 genutzt habe hâtte es mich noch interessiert. Rest kommt.
- eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
-
@etzeste13
Hi komme leider erst später dazu dir ausführlich zu antworten aber alles kein Hexenwerk aber die Doku war für mich genauso unbrauchbar und hab mich dadurch getestet, aber das muss ja nicht sein 😉.Frage Vorweg dein Link zur RS232 Info funktioniert nicht, da ich nur RS485 genutzt habe hâtte es mich noch interessiert. Rest kommt.
@Dieter_P Hallo Dieter, vielen Dank für deine Info und Hilfe... ich bin in der Zwischenzeit den gleichen Weg gegangen wie du und habe mich durchgetestet -> in der Zwischenzeit funktioniert alles, und ich werde meinen Weg dahin auch hier niederschreiben, damit nicht noch ein dritter unseren Weg teilen muss...😉
-
@Dieter_P
Hallo und vielen, vielen Dank für dein Feedback. Grundsätzlich hätte ich das auch so verstanden, aber auch nachdem ich die Dokus mehrmals gelesen habe bleiben für mich noch ein paar Detail-Fragen offen. Vielleicht kannst du mir auch hier ein paar Tipps geben.Dann fasse ich das mal kurz zusammen und erkläre dir anhand meines Anwendungsfalles wie ich es angehen würde. Bitte lass mich wissen, wenn da ein Fehler drinnen ist:
- eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
- die Version auf einen ESP8266 aufspielen
- GPIO1 auf ModBr Tx und GPIO3 auf ModBr Rx stellen
- Ich brauch Modbus RTU über RS232 ( für Fronius S3200 Steuerung) [https://forum.iobroker.net/assets/uploads/files/1577795130910-b1200419_modbus-lambdatronic-3200_50-04_05-17_de.pdf] deshalb würde ich dann die TTL Signale vom ESP auf einen TTL-RS232 Converter schalten. Wie soll hier die Verkabelung sein? muss ich den ModBr Rx auf den Rx vom TTL-RS232 converter verbinden oder auf den TX? Weist du wie hier die Logik von Tasmota ist?
- Wie wäre die Regel um die die Bridge richtig zu aktivieren? Und welch ein Command ist zu verwenden? Laut dieser Doku gibt es 2 Möglichkeiten, wobei mir der Unterschied nicht klar ist?
Ist ModbusTCPStart <PortNr>oderModbusTCPConnect <PortNr>, <ip_Adresse-Tasmota>zu verwenden? - Muss ich auf Tasmota auch mittels einer Rule immer die Baudrate für die RS232 Verbindung setzen. Wie komme ich hier in meinem Fall immer auf die 57600baud bei 8N1? Wie wäre hier die passende Rule?
- Wie ist dann der Iobroker Adapter richtig zu konfigurieren? Muss ich dann den
TCPoder denRTU over TCPMode wählen?
Ich hoffe hier keine alzu "dummen" Fragen zu stellen. Diese Dinge konnte ich wie gesagt nicht rauslesen, und wenn du das schon mal gemacht hast würde ich mich freuen, wenn du deine Erfahrung mit mir teilst.... ;-)
Danke und vG
EtzeIch habe nun durch Testen die Antworten auf alle meine Fragen gefunden und stelle meine Erkenntisse hier zur Verfügung, damit ich und jeder andere bei Bedarf nachlesen kann.
Hier mein Weg:ad1 + 2) einfach eine TasmotaFirmware für die gewünschte Hardware/Plattform Kompilieren und aufspielen. Ich kann hier TasmoCompiler empfehlen.
ad3) beim ESP8266 GPIO1 auf ModBr Tx und GPIO3 auf ModBr Rx stellen, beim ESP32 analog zur Verwendeten UART-schnittstelle
ad4) Bei meinen Test mit einem NodeMCU Board hat es immer so funktioniert das der TX vom NodeMCU auf den RX-Pin vom TTL-RS232 Wandler angeschlossen wurde. Also hier auskreuzen.
ad5 + 6) Für mein Beispiel habe ich am RTU Slave eine RS232 Schnittstelle mit 57600Baud, 8N1 Setting und ich habe Port 503 für die Verbindung gewählt. Damit muss man in der Tasmota Konsole folgende Befehle eingeben, damit die ModbusBridge erreichbar ist und für den Slave richtig übersetzt:
ModbusTCPStart 503 ModbusBaudrate 57600 ModbusSerialConfig 8N1Es war bei mir nicht nötig den Befehl
ModbusTCPConnect <PortNr>, <ip_Adresse-Tasmota>zu verwenden.
Was noch fehlt ist diese Befehler bei jedem Start automatisch auszuführen. Das sollte mittels Rules gehen, aber das habe ich mir noch nicht angesehen.
EDIT: bei mir funktioniert die Rule mit Eingabe der 2 Befehle in die Konsole, wobei die zweite Zeile einfach die Rule aus der ersten Zeile aktiviertRule1 ON System#Boot DO ModbusTCPStart 503; ModbusBaudrate 57600; ModbusSerialConfig 8N1 ENDON Rule1 1ad7) die Iobroker Modbus Instanz habe ich dann wie folgt konfiguriert

Dann konnte ich erfolgreiche eine Verbindung mit meinem Slave aufnehmen und die Register definieren und Abfragen.
Noch ein Tipp von mir:
Beim Testen IMMER eine Registeradresse des Slaves im Modbus-Adapter anlegen, ansosten kann es sein, das der Adapter nur gelb wird, obwohl grundsätzlich alles funktioniert.
Für das Testen der Umgebenung und der TTL-RS232 Konverter habe ich mir auf meinem PC einen RTU-Slave simuliert. Dazu habe ich die Software MosbusTools verwendet. Damit kann man ganz wunderbar eine Testumgebung aufbauen.Ich hoffe das hilft!!
vG Etze - eine Tasmotaversion compilieren bei der die ModBus-Bridge mit dabei ist. Ich mache das mit Tasmocompiler.
-
Prima, dass es geklappt hat.
Meinen ESP8266 Vorrat hab ich bis auf einige eiserne Reserven für sehr spezifische Dinge aufgelöst.
Da der ESP32 noch etwas mehr Rechenleistung besitzt würde ich ihn so etwas empfehlen.@Dieter_P
Ich habe bisher nur die ESP8266 verwendet, weil die bisher für jede Anwendung gereicht haben. ESP32 habe ich nur für die AI Wasserzähler in Verwendung. Wenn ich aber mal mehr GPIOs brauchen werde auch auch auf den ESP32 umsteigen. Welche Version/Type kannst du den empfehlen?

