NEWS
Iobroker <--> NodeRed Docker Modbus
-
Hallo Zusammen,
ich möchte gerne ioBroker mit Nodered über Modbus verbinden.
Alles ist auf einem RPI4, dabei ist ioBroker normal und Nodered unter Docker installiert worden.
ioBroker ist unter der IP 192.168.2.100 und Nodered unter 192.168.2.130 (macVlan) zu erreichen.Innerhalb von Nodered funktioniert alles. Ich kann über Modbus schreiben und lesen.
Unter ioBroker habe ich ebenfalls Nodered installiert und die gleichen Komponenten genommen, um das Register zu lesen:
Hier erhalte ich eine Fehlermeldung:Client -> fsm init state after reconnecting TCP@192.168.2.130:502 default Unit-Id: 6
Unter Modbus Adapter als Master, kommt diese Meldung:
On error: {"errno":-113,"code":"EHOSTUNREACH","syscall":"connect","address":"192.168.2.130","port":502}
Wenn ich das richtig verstehe, kann das Gerät ...130 nicht erreicht werden.
Leider, komme ich hier an meine Grenzen und weiß nicht, was ich einstellen muss, damit sich diese Geräte erreichen.
Da Nodered unter Docker als MacVlan eingestellt worden ist, müssten ja alle Ports offen sein?Hoffe mir kann jemand helfen.
Hier ist noch der Flow:
[ { "id": "c32b1b035b30c015", "type": "tab", "label": "Flow 2", "disabled": false, "info": "", "env": [] }, { "id": "3f39af9bcc140e8c", "type": "modbus-write", "z": "c32b1b035b30c015", "name": "", "showStatusActivities": true, "showErrors": true, "unitid": "", "dataType": "HoldingRegister", "adr": "0", "quantity": "1", "server": "30b6ebc808160e96", "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 500, "y": 280, "wires": [ [ "7af7161827adc045" ], [ "05f3c7b49256bbfb" ] ] }, { "id": "e3308ae254bd820d", "type": "random", "z": "c32b1b035b30c015", "name": "", "low": 1, "high": 10, "inte": "true", "property": "payload", "x": 160, "y": 280, "wires": [ [ "8804ceacf61db760" ] ] }, { "id": "46699a0f8ba6ac80", "type": "inject", "z": "c32b1b035b30c015", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 160, "y": 220, "wires": [ [ "e3308ae254bd820d" ] ] }, { "id": "05f3c7b49256bbfb", "type": "modbus-response", "z": "c32b1b035b30c015", "name": "", "registerShowMax": 20, "x": 710, "y": 280, "wires": [] }, { "id": "7af7161827adc045", "type": "debug", "z": "c32b1b035b30c015", "name": "debug 6", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "statusVal": "", "statusType": "auto", "x": 680, "y": 240, "wires": [] }, { "id": "8804ceacf61db760", "type": "function", "z": "c32b1b035b30c015", "name": "Output 1 control", "func": "msg.payload = { value: msg.payload, \n'fc': 6, \n'unitid': 1, \n'address': 0 , \n'quantity': 1 } \nreturn msg;", "outputs": 1, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 320, "y": 280, "wires": [ [ "3f39af9bcc140e8c" ] ] }, { "id": "064a12e96ba1f6d4", "type": "modbus-flex-server", "z": "c32b1b035b30c015", "name": "", "logEnabled": true, "serverAddress": "192.168.2.130", "serverPort": "502", "responseDelay": 100, "unitId": 1, "delayUnit": "ms", "coilsBufferSize": 20000, "registersBufferSize": 20000, "minAddress": 0, "splitAddress": 10000, "funcGetCoil": "function getFlexCoil(addr, unitID) {\n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t} \n}", "funcGetDiscreteInput": "function getFlexDiscreteInput(addr, unitID) {\n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.coils.readUInt8(addr * node.bufferFactor) \n\t} \n}", "funcGetInputRegister": "function getFlexInputRegister(addr, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor) \n\t} \n}", "funcGetHoldingRegister": "function getFlexHoldingRegsiter(addr, unitID) { \n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\treturn node.registers.readUInt16BE(addr * node.bufferFactor) \n\t} \n}", "funcSetCoil": "function setFlexCoil(addr, value, unitID) { \n\tif (unitID === node.unitId && \n\t\taddr >= node.minAddress && \n\t\taddr <= node.splitAddress) { \n\n\t\tnode.coils.writeUInt8(value, addr * node.bufferFactor) \n\t} \n}", "funcSetRegister": "function setFlexRegister(addr, value, unitID) { \n\taddr += node.splitAddress\n\tif (unitID === node.unitId && \n\t\taddr >= node.splitAddress && \n\t\taddr <= node.splitAddress * 2) { \n\n\t\tnode.registers.writeUInt16BE(value, addr * node.bufferFactor) \n\t} \n}", "showErrors": true, "x": 380, "y": 100, "wires": [ [], [], [], [], [] ] }, { "id": "3ebc92c2c64ebe19", "type": "inject", "z": "c32b1b035b30c015", "name": "", "props": [ { "p": "payload" }, { "p": "topic", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "", "payloadType": "date", "x": 160, "y": 400, "wires": [ [ "f8d19f13feb1fd4c" ] ] }, { "id": "f8d19f13feb1fd4c", "type": "modbus-getter", "z": "c32b1b035b30c015", "name": "", "showStatusActivities": true, "showErrors": true, "logIOActivities": false, "unitid": "", "dataType": "HoldingRegister", "adr": "0", "quantity": "1", "server": "30b6ebc808160e96", "useIOFile": false, "ioFile": "", "useIOForPayload": false, "emptyMsgOnFail": false, "keepMsgProperties": false, "x": 500, "y": 400, "wires": [ [], [ "6f9a0dcac2cb4296" ] ] }, { "id": "6f9a0dcac2cb4296", "type": "modbus-response", "z": "c32b1b035b30c015", "name": "", "registerShowMax": 20, "x": 710, "y": 400, "wires": [] }, { "id": "30b6ebc808160e96", "type": "modbus-client", "name": "", "clienttype": "tcp", "bufferCommands": true, "stateLogEnabled": false, "queueLogEnabled": false, "failureLogEnabled": true, "tcpHost": "192.168.2.130", "tcpPort": "502", "tcpType": "DEFAULT", "serialPort": "/dev/ttyUSB", "serialType": "RTU-BUFFERD", "serialBaudrate": "9600", "serialDatabits": "8", "serialStopbits": "1", "serialParity": "none", "serialConnectionDelay": "100", "serialAsciiResponseStartDelimiter": "0x3A", "unit_id": 1, "commandDelay": 1, "clientTimeout": 1000, "reconnectOnTimeout": true, "reconnectTimeout": 2000, "parallelUnitIdsAllowed": true } ]
-
Ich kenn mich mit dem Modbus nicht aus. Aber kann es sein, dass Du nicht mehrfach auf die gleiche Schnittstelle zugreifen kannst. Mach halt mal Deine Dockerinstallation mit NodeRed (also die funktioniert) komplett inaktiv und schau, ob dann der Connect funktioniert?
Und dann auch immer nur eines - entweder Adapter oder NodeRed. - Ich kann mir immer schlecht vorstellen, dass man solche Schnittstellen mehrfach nutzen kann ohne das es Konflikte gibt.
-
@mickym
Verbindungen kann man mehrere öffnen, dafür gibts die Device ID.Wenn ich unter ioBroker Nodered einen Modbus Server öffne und in das Register 0 einen Wert schreibe, kann ich über iobroker Modbus Adapter & Nodered Container, diesen Wert abrufen.
In die andere Richtung, also von Nodered Container zu ioBroker funktioniert es leider nicht, Weder MacVlan oder Bridge Mode.
Hier mal bildlich dargestellt:
Meine Vermutung ist, dass da sich irgendwas beißt, weil alles von einem Gerät kommt.
Mit der Lösung, könnte ich leben. Dennoch würde es mich schon interessieren, wieso die andere Variante nicht funktioniert.