RS485 Module,  Tasmota

RS485 WLan WiFi Modbus Bridge Gateway?

Wie so häufig basiert eine Erklärung auf einer verständlichen Kommunikation oder ganz einfach einer verständlichen Sprache. Kommt es zu einem Transfer von Daten unterliegt dieser entsprechenden Schichten, beispielsweise OSI – Model. Üblicherweise passiert diese „Schichtung“ im typischen Rahmen eines Gateways oder mal ganz praktisch einem Router.

Reduziert man sich nun auf eine Datenumsetzung von RS485 auf beispielsweise WLan ist die Bezeichnung Gateway fragwürdig. Der Transfer reduziert sich hier auf Schicht 4 ganz gleich ob TCP (Transmission Control Protocol) oder UDP (User Datagram Protocol).

Hierzu addiert sich nun die Anwendungsschicht im OSI – Model Schicht 7. Hier werden typische Protokolle wie HTTP, SMTP, FTP, MQTT,… innerhalb des vorgenannten Layer 4 Transportschicht durchgereicht.

Dementsprechend reduzieren wir uns auf die Bezeichnung Bridge, zu Deutsch eine Brücke. Ganz praktisch – im Bezug unseres RS485 Tasmota Modbus Modul – es wird vom RS485 Level (von -7V bis +12V) auf UART Level (3,3V) umgesetzt. Eine höhere serielle Signalspannung wird auf eine niedrigere Signalspannung und umgekehrt umgesetzt. Das passiert gleichermassen wie bei einem RS485 USB Konverter, also RS485 Level auf 5V Level.

RS485 WLan Bridge im Detail

Basierend auf der oben beschriebenen Funktionsweise erfolgt dies alleinig durch Hardware. Wird ein RS485 Signal empfangen wird dieses auf UART Level reduziert und geht auf die serielle Schnittstelle des ESP8266 des EI-OT RS485 Moduls über.

Wie man nun weiß erscheinen die seriellen Daten nicht im Webinterface der Tasmota Firmware, sondern lediglich in der Konsole, – die übliche Form seriell zu kommunizieren -. Mittels entsprechender Syntax / Tasmota Befehlssatz kann man nun direkt über WLan – man nutzt also TCP / die Transportschicht in Kombination mit dem HTTP Protokoll (die Tasmota Benutzeroberfläche / Konsole) um Daten auf RS485 auszugeben bzw. zu empfangen -.

RS485 und Modbus

Wie bereits erwähnt bezeichnet RS485 eine Schnittstelle also Hardware, Modbus hingegen ist ein standardisiertes Protokoll welches unter anderen (auch RS232 und RS422) die RS485 Schnittstelle nutzt. Kommt nun Modbus zum Tragen wird man mit einem typischen seriellen Befehlssatz bestenfalls (meist nicht einmal das) einen Error als Antwort erhalten. Denn im Eigentlichen ist RS485 keine einfache serielle Schnittstelle sondern ein Bussystem. Mit einfachen Worten es können mehrere Teilnehmer über nur eine Schnittstelle kommunizieren. Dies können selbstredend unterschiedlichste Geräte sein, jedes mit individueller Funktion als auch Firmware und Protokoll zum einfachen Verständnis Befehlssätze.

Das Modbus Protokoll vereinfacht basierend auf einem einheitlichen Standard / Syntax die individuelle Kommunikation mit jedem Endgerät. Hierbei sollte man nun zwischen Modbus RTU (Master/Slave) und Modbus TCP (Client/Server) differenzieren. Im Bezug der Topologie sollte man stets beachten der Master im TCP Modbus ist stets der Client und der Slave ist der Server.

Zurück zum Tasmota EI-OT RS485 WLan Bridge Modul wird nun die jeweilig notwendige Konfiguration, basierend auf die Anwendung deutlich.

Denkbare Modbus Anwendungen sind

Modbus Bridge im Vergleich zu TCP Bridge

Oftmals ist die Lösung viel einfacher als man zunächst dachte. Häufig ist der Ansatz eine kabelgebundene RS485 Anbindung durch eine kabellose WLan Verbindung zu ersetzen. Hierbei sollte man stets zwischen Protokoll und Transport differenzieren.

Als einfaches Beispiel, die vormals kabelgebundene Lösung basiert häufig auf einem Slave (Endgerät) und einem Master (PC) oft in Kombination mit einem RS485 USB Konverter und einer Software mit entsprechender Schnittstellen Infrastruktur.

Ersetzt man nun den RS485 USB TTL Konverter durch das Tasmota RS485 Modul ist es keineswegs notwendig die Daten / das Protokoll (Modbus) zu interpretieren. Es muss lediglich die Schnittstelle entsprechend definiert werden, im Bezug Modbus üblicherweise Port 502. Zur Erinnerung TCP ist der Transport Schicht / Layer, das heisst das Modbus Protokoll wird über TCP übertragen, ohne eine Veränderung des Datenpakets / Protokoll. Modbus nutzt den Transportlayer / TCP zur Übertragung der Datenpakete.

Hierzu darf allerdings die RS485 Schnittstelle / GPIO1 und GPIO3 nicht als Modbus-Bridge, sondern muß als TCP-Bridge konfiguriert werden.

Im Detail handelt es sich hierbei um eine Serial to TCP Bridge, das heisst die Konfiguration der Schnittstelle basiert auf dem typischen Befehlssatz serieller Schnittstellen.

Die Konfiguration und Initialisierung der Tasmota Serial to TCP Bridge wird hier überschaubar dokumentiert.

Im Vergleich zur Serial to TCP wird bei der Tasmota Modbus Bridge das vorgenannte Modbus genutzt. Das heisst es erfolgt ein Request basierend auf dem Modbus Protokoll und das Endgerät antwortet basierend auf dem Request.

Hierzu wird die Tasmota Konsole mit entsprechendem Befehlssatz verwendet innerhalb der Tasmota Modbus Bridge verwendet. Mittels dem Befehl ModbusSend wird ein Request in Form eines JSON Object über die serielle Schnittstelle des ESP8266 auf den RS485 Konverter ausgegeben.

Das jeweilige Endgerät interpretiert den Modbus Request und antwortet mit einem entsprechendem Datenpaket über den RS485 Konverter über die serielle Schnittstelle des ESP8266. Die Konsole interpretiert das mittels ModbusReceived Datenpaket und gibt das Datenpaket als JSON Object in der Konsole aus.

Im Detail fungiert das EI-OT Tasmota RS485 Modul somit als Modbus „Master“ um Daten via Befehlszeile / Konsole zu senden und entsprechend zu empfangen. Möchte man nun die Daten anderweitig verwenden bedarf es entweder entsprechender Tasmota Rules oder die Verwendung von Tasmota Script.

Dementsprechend stehen folgende Tasmota Firmware Versionen zum Download bereit

RS485 Tasmota Firmware in Deutsch mit Tasmota Script Unterstützung
https://www.ei-ot.de/download/4134/?tmstv=1723019633

RS485 Tasmota Firmware english version with Tasmota Script Support
https://www.ei-ot.de/download/4133/?tmstv=1723018886

RS485 Tasmota Firmware in Deutsch mit Tasmota Rules Unterstützung
https://www.ei-ot.de/download/4130/?tmstv=1723018721

RS485 Tasmota Firmware english version with Tasmota Rules Support
https://www.ei-ot.de/download/4127/?tmstv=1723018749

Selbstredend ist auch die Umsetzung auf ein anderes Protokoll beispielsweise MQTT Telnet bzw. fixer Log Server mit entsprechendem Port, oder gar HTTP realisierbar.

Ein YouTube Video Tutorial zur EI-OT RS485 Modul Konfiguration

15 Comments

  • Jörg Nissen

    Hallo,
    ich setzte das Modul mit einem SDM72D ein. Ich bekomme auch Daten. Die Aktuellen Wert sind richtig. Allerdings wird mir bei den Total werten, ein anderen Wert als auf dem Zähler angezeigt.
    Zähler zeigt 2.89 in Tasmota 0.029. Mir scheint hier wird irgentwie der Wert in in KWH umgerechnet. Kann ich hier irgentwo was einstellen ?

  • admin

    Hi Jörg,
    hm ich kratze mich da mal vorsichtig am Kopf 😉
    Also ich vermute Du hast das nachfolgende Script für den SDM72D (MODBus) von der Tasmota Seite verwendet :
    https://tasmota.github.io/docs/Smart-Meter-Interface/#sdm72d-modbus

    >D
    >B
    ->sensor53 r
    >M 1
    +1,25,mN1,0,9600,SDM72D,26,1,01040000,01040002,01040004,01040006,01040008,0104000a,0104000c,0104000e,01040010,01040012,01040014,01040016,01040018,0104001a,0104001c,0104001e,01040020,01040022,0104002a,0104002e,01040030,01040034,01040038,0104003c,0104003e,01040046,01040048,0104004A,01040156,01040158,0104018c,01040500,01040502
    1,010404ffffffff@i0:1,Voltage P1,V,voltage_phase1,2
    1,010404ffffffff@i1:1,Voltage P2,V,voltage_phase2,2
    …..

    weiter unten im Script ist
    1,010404ffffffff@i26:1,Energy Imported,kWh,energy_imported,3
    1,010404ffffffff@i27:1,Energy Exported,kWh,energy_exported,3
    1,010404ffffffff@i28:1,Energy Total,kWh,energy_total,3
    1,010404ffffffff@i29:1,Energy Reactive Total,kVArh,energy_reactive_total,3
    1,010404ffffffff@i30:1,Net Energy,kWh,energy_net,3
    das heisst es wird auf kWh umgerechnet

    Ohne das ich jetzt tiefer in das Script eintauche wenn Du die obigen Zeilen durch

    1,010404ffffffff@i26:1,Energy Imported,kWh,energy_imported,2
    1,010404ffffffff@i27:1,Energy Exported,kWh,energy_exported,2
    1,010404ffffffff@i28:1,Energy Total,kWh,energy_total,2
    1,010404ffffffff@i29:1,Energy Reactive Total,kVArh,energy_reactive_total,2
    1,010404ffffffff@i30:1,Net Energy,kWh,energy_net,2

    könnte die Divison draussen sein, bin mir nicht sicher aber einen Versuch ist es wert

    Grüße
    Markus

  • Bernd Theis

    Hallo,
    ich habe mir das „Tasmota RS485 Modbus TCP MQTT WLan WiFi Bridge Modul 5-12V“ zugelegt und wollte damit meinen Goodwe Hybrid-WR abfragen, aber irgendwie bekomme ich keine Verbindung zustande.

    Mein Verständnis:
    1.) wenn ich das Modul auf „ModBr“ setze, dann könnte ich per Konsole oder einem passenden Script Daten auslesen und diese dann z.B. per MQTT senden.
    2.) wenn ich das Modul auf „TCP“ setze, dann sollte sich das Modul transparent verhalten und ich könnte mit einem beliebigen Modbusmaster per TCP auf den WR zugreifen und Daten abholen.

    Ich möchte die Anwendungsvariante 2.) verwenden. Dazu habe ich folgendes eingestellt:
    – in der Confi habe ich „TCP“ eingestellt (ich nehme an das Vertauschen von RX und TX ist ein Versehen, oder? Funktioniert aber auch andersherum nicht.)
    – Baudrate (9600) und Config (8N1) habe ich eingestellt und überprüft
    – die Schnittstelle habe ich mit „TCPStart ,:502“ gestartet
    ==> TCP: Starting TCP server on port 502
    ==> TCP: Filtering 192.xxx.xxx.0 (was mich wundert ist die IP 192.xxx.xxx.0. Das Modul hat die IP 192.xxx.xxx.224?)
    ==> RSL: RESULT = {„TCPStart“:“Done“}
    – mit „SerialSend 3d 03 89 1f 00 01“ versucht zu verbinden und Daten abzuholen
    ==> RESULT = {„SerialSend“:“Done“}, keine weiteren Ergebnisse oder Daten

    Bei dem Versuch mich mit QModBus über TCP und Deinem Modul zu verbinden kommt auch nur eine Fehlermeldung
    ==> „Protocol error: Slave threw exception ‚No error‘ or function not implemented.

    Mit einem Standard USB-Konverter und einem Terminalprogramm (QModBus) kann ich mich mit dem WR verbinden und ihn auslesen, bzw. auch Befehle senden.
    Auch über Fhem mit dem Modul Modbusattr funktioniert es, mit Deinem Adapter bekomme ich aber leider keine Verbindung zustande.

    Ich habe gerade keine Idee mehr woran es liegen könnte. Vielleicht verstehe ich aber auch etwas grundsätzliches falsch.

    Wenn Jemand eine Idee hat woran es liegen könnte, dann immer her damit. Danke.

    • admin

      Guten Morgen Bernd,
      ähm ich bin leicht verwirrt 😉
      zu 1. mit Script auslesen – ja insofern die Script Firmware auf dem ESP-01+ installiert wurde

      zu 2. beliebigen Modbus Master leider liegt hier aus meiner Erfahrung der Hase im Pfeffer
      … beispielsweise bei Homeassistant wird oft TCP Bridge ausgewählt, muss aber als rtuovertcp wie folgt konfiguriert werden
      modbus:
      – name: modbus_hub
      type: rtuovertcp
      host: IP_ADDRESS
      port: 502

      gegen die TCP Bridge und Schnittstelle / Baudrate (Befehl TCPBaudRate 9600) ist nichts einzuwenden

      TCPStart 502 gibt zwar aus das TCP Socket gestartet wurde aber eine Socket Verbindung wurde nicht hergestellt,
      hier würde ich zunächst einmal strikt auf den „Master“ WICHTIG zu beachten im Detail ist es ja umgekehrt das Modul ist der Master
      verweisen also
      TCPStart 502, IP Adresse des Client <-- also PC oder ? dann in der Konsole mal schauen was ausgegeben wird Zu SerialSend ... der Befehl müsste wie folgt lauten SerialSend5 3d 03 89 1f 00 01 da Hex übergeben wird siehe https://tasmota.github.io/docs/Commands/#serial-bridge

      So bei QModbus bin ich auch schon raus aber die Richtung dürfte der Modbus Client sein
      https://doc.qt.io/qt-6/qtserialbus-modbus-client-example.html

      Connection type TCP
      Port IPAdressedesModuls:502

      Abschliessend bitte nicht falsch verstehen mir geht es letztlich nur um Fehlereingrenzung,
      wurde bei dem Modul TCPStart ausgeführt und es wird done zurückgegeben
      dann läuft das <-- habe da schon ein paar Jährchen Erfahrung, dann gilt es auf der "anderen Seite" Fehler einzugrenzen Grüße Markus

  • Bernd Theis

    Hallo Markus,
    vielen Dank für die schnelle Antwort, hatte ich Gestern leider nicht mitbekommen. Hab ich da wieder was übersehen oder gibt es keine eMail-Benachrichtigung bei neuen Kommentaren?

    Das mit dem Client war der treffende Hinweis. Es funktioniert jetzt. Auch das RTU über TCP trifft evtl. zu. Ich kann im FHEM-Modul (modbusattr) auch “ RTU“ oder “ TCP“ angeben. Diese Unterscheidung war mir in FHEM auch schon aufgefallen, aber ich hatte nirgends einen Hinweis für den Zweck gefunden. Ich habe jetzt also gleich „RTU“ eingetragen.

    Die Variante „Script“ hatte ich nur zum Verständnis erwähnt. Natürlich muß ich dafür eine Tasmota-Version mit eingeschalteter Scriptunterstützung haben. Ich verwende das an anderer Stelle auch schon (Stromzähler auslesen). Ich bin auch ein Fan von MQTT und das wäre durchaus auch ein Weg gewesen, aber ich habe bei meinem anderen direkt angeschlossenen Goodwe-WR schon alle notwendigen Register über das FHEM-Modul „modbusattr“ parametriert und wollte das nicht nochmal alles neu in ein Tasmota-Script umbauen.

    Was mich verwirrt hat war, das man im Adapter die IP-Adresse des Ziels (in dem Fall mein RasPi auf dem FHEM läuft) angeben muß. Das bedeutet aber andererseits auch das ich nur mit diesem „Ziel/client“ kommunizieren kann, oder? Es ist also kein Modbus-Server sondern eine Punkt zu Punkt Verbindung? An dieser Stelle fehlen mir ein wenig die topologischen Zusammenhänge. Das ich SerialSend5 verwenden muß hatte ich mir schon gedacht und auch schon versucht, was aber wegen der falschen IP im tcpstart dann natürlich trotzdem nicht funktioniert hat.

    Also wieder was gelernt und nochmals Vielen Dank.

    Grüße
    Bernd

    • admin

      Guten Morgen Bernd,
      an und für sich sollte eine Emailbenachrichtigung erfolgen, muß ich mal überprüfen.
      Ja das mit der Konfiguration auf der Clientseite RTU/TCP ist so ein Thema,
      die Erklärungen sind oft sehr weitläufig / lückenhaft, bzw. nicht wirklich praxisnah.
      Oft wäre schon der Hinweis Differenzierung im Bezug Modbus RTU und TCP hilfreich:

      sobald TCP im Spiel ist wechselt das Ganz will heissen
      was bei RTU Master ist ist bei TCP Client

      Wegen dem TCP Socket / Zielclient, das Ganze funktioniert auch ohne strikte IP Zuweisung, also nur
      TCPStart 502
      Aber bei der Ersteinrichtung ist die strikte Zuweisung hilfreich,
      da man sofort in der Konsole eine entsprechende Info erhält <-- zumal oftmals Firewall, Router, Portfordwaring hier mit rein spielt. Nebenbei, nicht nur Du hast etwas gelernt obwohl FHEM sehr verbreitet hatte ich das im Bezug RS485 / Modbus noch nicht auf dem Tisch. VIELEN DANK für Dein Feeback Grüße Markus

  • Torsten

    Hallo,
    ich würde gerne mit dem Adapter meine Brauchwasser-Wärmepumpe über die Modbus-Schnittstelle auslesen. Diese unterstützt aber nur 8E1, 8O1 und 8N2 (jeweils 19k2 oder 9k6).
    In allen Anleitungen die ich bisher gelesen habe steht aber dass Tasmota nur 8N1 unterstützt.
    Ist das wirklich so?
    Wäre schade wenn ich ihn umsonst bestelle.
    VG
    Torsten

    • admin

      Guten Morgen Torsten,
      definitiv ist die Aussage Tasmota unterstützt nur 8N1 falsch.
      Die Schnittstellenparameter können ganz einfach über die Konsole gesetzt werden
      hier die Beschreibung zum Befehlssatz
      Im Grunde für EVEN
      SerialConfig 8E1 über die Befehlszeile der Konsole eingeben unter ENTER Taste drücken
      dann Baudrate 19200 oder 9600 über die Befehlszeile der Konsole eingeben unter ENTER Taste drücken
      das wars auch schon

      Da Du Modbus schreibst verwendest Du eventuell SML Script
      hier wird im Script gleich zu beginn z.B.
      >M 1
      +1,3,mE1,0,9600,Device,1,1….

      also m = modbus gefolgt von Schnittstellenparameter E = Even gesetzt.

      VG
      Markus

      • Torsten

        Hallo Markus,

        vielen Dank für die Antwort.
        Zwischenzeitlich habe ich das Ganze jetzt erst mal über eine Modbus-TCP-Bridge auf einem alten Raspberry Pi (1 Mod. B) + RS485-Adapter mit ‚mbusd‘ realisiert. Funktioniert problemlos, ist aber etwas „overkill“.
        Sobald ich etwas mehr Zeit habe werde ich mich mal mit SML-Script beschäftigen und dann wahrscheinlich auf den Tasmota-Adapter umrüsten.
        Dafür muss aber (wie ich heute feststellen durfte) auch das Wlan im Keller noch etwas optimiert werden.

        VG
        Torsten

        • admin

          Hallo Torsten,
          hm Modbus-TCP-Bridge hört sich so an als sei da am „anderen Ende“ einen ? MQTT Broker … ???
          Ja ein Rasp ist ein bisschen „overdressed“ für RS485 TCP Bridge,
          nebenbei kannst Du ja einfach auch im Bezug des RS485 WLan Bridge Modul verwenden.

          Grüße
          Markus

          • Torsten

            Hallo Markus,
            nein, am anderen Ende hängt ein evcc auf einem Victron Cerbo-S. Dieser steuert die PV-Überschussladung des Wasserspeichers per Heizstab.
            Da aber am Cerbo-S die USB-Ports scheinbar kaum für nicht im Venus-OS vorgesehene Geräte zu verwenden sind, konnte ich den RS485-USB-Adapter dort nicht direkt betreiben (für die Stromversorgung des Raspi reicht der USB-Port allerdings).
            Sobald meine Zeit es hergibt und der WLAN-Empfang im Keller verbessert wurde, werde ich mich nochmal mit dem Thema befassen.
            VG
            Torsten

          • admin

            Hallo Torsten,
            da war ich mal wieder ein wenig verwirrt,
            die Emailbenachrichtigung in der Kommentarfunktion haben wir deaktiviert (hatte da eine Beschwerde seitens eines Benutzers).
            ABER einfach kurz im Forum schreiben, da ist die Benachrichtigung aktiviert.
            Eine Registrierung für Kunden ist nicht notwendig,
            zum Login einfach Email oder Benutzername, sowie Passwort des Kundenkontos verwenden.

            Grüße
            Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert


Der Zeitraum für die reCAPTCHA-Überprüfung ist abgelaufen. Bitte laden Sie die Seite neu.