Ankündigung

Einklappen
Keine Ankündigung bisher.

Modbus via Raspberry

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Modbus via Raspberry

    hallo

    ist es möglich an den Rx/Tx Anschlüssen vom Raspberry via Openhab eine Verbindung mit Modbus-gerät herzustellen?
    Ich möchte von meiner Drexel u Weiß-Wärmepumpe diverse Daten auslesen, hatte bisher jedoch noch nie mit Modbus zu tun?
    Das Binding Modbus habe ich schon gefunden, die Schnittstelle ist seriell an der Wärmepumpe.

    freue mich auf konstruktive Antworten für Anfänger

    #2
    Ich habe nun vom Raspberry mit OPENHAB2 via USB-RS232 eine Verbindung mit meiner D&W Wärmepumpe (Modbus-RS232-Adapter).

    #Die Modbus.cfg beinhaltet:
    poll=4000
    serial.slave1.connection=/dev/serial:19200:8:none:1:rtu //19200:8:none:1 lt D&W
    serial.slave1.type=discrete
    serial.slave1.id=130 //für Lüfterplatine
    serial.slave1.start=230 //ich möchte Register 230 auslesen
    serial.slave1.length=10

    Item:
    Number CO2Messung "CO2-Wert Abluft [%.1f]" (Waermepumpe) {modbus="slave1:230"}

    Sitemap:
    Text item=CO2Messung

    Logging:
    Code:
    2017-11-15 21:08:55.351 [ERROR] [et.wimpi.modbus.net.SerialConnection] - Could not get port identifier, maybe insufficient permissions. null
    2017-11-15 21:08:55.355 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 1/3 error: Could not get port identifier, maybe insufficient permissions. null. Connection SerialConnection@1d2344b[portName=/dev/serial,port=<null>]. Endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]
    2017-11-15 21:08:55.397 [ERROR] [et.wimpi.modbus.net.SerialConnection] - Could not get port identifier, maybe insufficient permissions. null
    2017-11-15 21:08:55.401 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 2/3 error: Could not get port identifier, maybe insufficient permissions. null. Connection SerialConnection@1d2344b[portName=/dev/serial,port=<null>]. Endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]
    2017-11-15 21:08:55.443 [ERROR] [et.wimpi.modbus.net.SerialConnection] - Could not get port identifier, maybe insufficient permissions. null
    2017-11-15 21:08:55.451 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - connect try 3/3 error: Could not get port identifier, maybe insufficient permissions. null. Connection SerialConnection@1d2344b[portName=/dev/serial,port=<null>]. Endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]
    2017-11-15 21:08:55.453 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - re-connect reached max tries 3, throwing last error: Could not get port identifier, maybe insufficient permissions. null. Connection SerialConnection@1d2344b[portName=/dev/serial,port=<null>]. Endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]
    2017-11-15 21:08:55.456 [ERROR] [ing.ModbusSlaveConnectionFactoryImpl] - Error connecting connection SerialConnection@1d2344b[portName=/dev/serial,port=<null>] for endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]: Could not get port identifier, maybe insufficient permissions. null
    2017-11-15 21:08:55.459 [WARN ] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (slave1): Error getting a new connection for endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]. Error was: Unable to validate object
    2017-11-15 21:08:55.461 [WARN ] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (slave1) not connected -- aborting read request net.wimpi.modbus.msg.ReadInputDiscretesRequest@5a8cbc. Endpoint ModbusSerialSlaveEndpoint@aa108f[portName=/dev/serial]
    Was mache ich falsch bzw warum bekomme ich keine Antwort von der Wärmepumpe?

    Kommentar


      #3
      Der Portname ist sicherlich nicht /dev/serial

      Der schnellste Weg, die USB-RS232 zu identifizieren, ist, den USB-Dongle anzuschließen und anschließend in der Raspi-Konsole dmesg aufzurufen. In den letzten Zeilen siehst Du dann die Initialisierung des neuen Geräts (das ist logischerweise der USB-Dongle) mitsamt Namen. Üblicherweise wird so ein Dongle als /dev/ttyUSB0 angemeldet, es sind aber auch andere Namen möglich. Ziemlich sicher ist der Anfang der Schnittstellennamens aber /dev/tty weil alle seriellen Schnittstellen in GNU/Linux so bezeichnet werden.

      Da ich Modbus nicht nutze, weiß ich nicht, ob noch weitere Fehler in der Konfiguration sind.

      Falls die Schnittstelle einen besonderen Namen aufweist, musst Du unter /etc/default/openhab2 eine Zeile
      Code:
      EXTRA_JAVA_OPTS="-Dgnu.io.rxtx.SerialPorts=/dev/ttyUSB0"
      eintragen. Diese Zeile ist beispielhaft, die Schnittstelle heißt in dem Beispiel /dev/ttyUSB0. Entsprechend muss diese Zeile also angepasst werden. Falls man mehrere Schnittstellen nutzbar machen möchte, müssen die mit Doppelpunkt voneinander getrennt angegeben werden. Per default sind nur /dev/ttyS0, /dey/ttyS1 und /dev/ttyS2 verfügbar.
      Zuletzt geändert von udo1toni; 16.11.2017, 12:06.

      Kommentar


        #4
        Also bei mir erscheint sowohl die /dev/serial als auch die /dev/ttyUSB0. Ich hab das Binding auf /dev/ttyUSB0 geändert. Kann es sein, dass ich einfach keine Antwort der Wärmepumpe erhalte?:
        Code:
        2017-11-19 09:32:02.693 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 02 00 e6 00 0a 06 09
        2017-11-19 09:32:02.695 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
        2017-11-19 09:32:02.698 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 1/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputDiscretesRequest@2ef7df (unit id 130 & transaction 30304). Serial parameters: SerialParameters@ad2be6[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
        2017-11-19 09:32:02.795 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 02 00 e6 00 0a 06 09
        2017-11-19 09:32:02.798 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
        2017-11-19 09:32:02.801 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 2/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputDiscretesRequest@2ef7df (unit id 130 & transaction 30305). Serial parameters: SerialParameters@ad2be6[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
        2017-11-19 09:32:02.945 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 02 00 e6 00 0a 06 09
        2017-11-19 09:32:02.949 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
        2017-11-19 09:32:02.952 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 3/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputDiscretesRequest@2ef7df (unit id 130 & transaction 30306). Serial parameters: SerialParameters@ad2be6[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
        2017-11-19 09:32:02.954 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute reached max tries 3, throwing last error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputDiscretesRequest@2ef7df (unit id 130 & transaction 30306). Serial parameters: SerialParameters@ad2be6[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
        2017-11-19 09:32:02.956 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (slave1): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputDiscretesRequest@2ef7df. Error: I/O exception - failed to read. Endpoint ModbusSerialSlaveEndpoint@1c402c0[portName=/dev/ttyUSB0]. Connection: SerialConnection@16e4eec[portName=/dev/ttyUSB0,port=/dev/ttyUSB0]

        Kommentar


          #5
          Wie sehen die Rechte aus?
          Ist er User, unter dem openHAB2 läuft (normalerweise openhab) Mitglied in der Gruppe modem?
          Code:
          groups openhab
          Was spuckt
          Code:
          ls -l /dev/ttyUSB0
          aus?

          Kommentar


            #6
            groups openhab:
            openhab : openhab tty dialout gpio

            ls -l /dev/ttyUSB0:
            crw-rw---- 1 root dialout 188, 0 Nov 19 09:40 /dev/ttyUSB0

            Kommentar


              #7
              Hmmm... das passt soweit. Hast Du /dev/ttyUSB0 auch in /etc/default/openhab2 in den EXTRA_JAVA_OPTS eingetragen? (Siehe Posting #3)

              Kommentar


                #8
                Ja, auch das ist drin (war schon drin)

                Kommentar


                  #9
                  Hast Du das System schon mal neu gestartet?

                  Kommentar


                    #10
                    Mehrmals, ja

                    Kommentar


                      #11
                      Was Du erstmal noch probieren könnstest, wäre, die Rechte für die Schnittstelle aufzubohren, mit
                      Code:
                      sudo chmod 777 /dev/ttyUSB0
                      Anschließend openHAB starten (aber nicht den Rechner! Dadurch werden die Rechte evtl. wieder zurückgesetzt) und schauen, ob sich was bessert.
                      Hast Du externe Software, mit der Du die Funktion des Sticks überprüfen kannst?

                      Kommentar


                        #12
                        Hallo Udo!

                        Auch die Rechte haben das Problem noch nicht gelöst.
                        Die USB-RS232-Adapter habe ich nun mit einem Windows-Rechner getestet - sind auch ok.
                        Ich werde sobald ich Zeit habe das ganze noch unter Linux am Raspberry testen und melde mich dann wieder.

                        Kommentar


                          #13
                          Was mir jetzt noch auffällt: zum einen der Name der Konfigurationsdatei, der ist modbus.cfg, nicht Modbus.cfg
                          Zum anderen: hast Du die Kommentare mit in der Datei stehen? Kommentare in *.cfg Dateien sind mit # abzusetzen und in eine eigene Zeile zu schreiben, keinesfalls hinter einen Parameter.
                          Ob die Parameter selbst passen, weißt Du besser als ich.

                          Kommentar


                            #14
                            ich habe nun auch meine beiden USB-RS232-Adapter am Raspberry getestet - sind in Ordnung, Rechte auch drauf.
                            Die Schreibweisen passen auch (Groß-Kleinschreibung, bzw. #).
                            Ich war schon soweit, dass ich eine neue SD-Karte mit einer neuen Installation von OPENHAB2.1 nur mit dem Modbus-Binding aufgesetzt habe.
                            Ohne sitemap.cfg und items.cfg bekomme ich schon Error (nach dem Installieren und Einrichten von Modbus-Binding):
                            Code:
                            2017-11-27 20:17:55.824 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
                            2017-11-27 20:17:55.827 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 1/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputRegistersRequest@f58f4a (unit id 130 & transaction 6235). Serial parameters: SerialParameters@18cb834[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
                            2017-11-27 20:17:55.941 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 04 00 00 00 02 6e 38
                            2017-11-27 20:17:55.944 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
                            2017-11-27 20:17:55.946 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 2/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputRegistersRequest@f58f4a (unit id 130 & transaction 6236). Serial parameters: SerialParameters@18cb834[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
                            2017-11-27 20:17:56.045 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 04 00 00 00 02 6e 38
                            2017-11-27 20:17:56.047 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - failed to read: CRC Error in received frame: 0 bytes:
                            2017-11-27 20:17:56.050 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute try 3/3 error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputRegistersRequest@f58f4a (unit id 130 & transaction 6237). Serial parameters: SerialParameters@18cb834[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
                            2017-11-27 20:17:56.052 [ERROR] [pi.modbus.io.ModbusSerialTransaction] - execute reached max tries 3, throwing last error: I/O exception - failed to read. Request: net.wimpi.modbus.msg.ReadInputRegistersRequest@f58f4a (unit id 130 & transaction 6237). Serial parameters: SerialParameters@18cb834[portName=/dev/ttyUSB0,baudRate=19200,flowControlIn=none,flowControlOut=none,databits=8,stopbits=1,parity=none,encoding=rtu,echo=false,receiveTimeoutMillis=1500]
                            2017-11-27 20:17:56.054 [ERROR] [.binding.modbus.internal.ModbusSlave] - ModbusSlave (slave1): Error getting modbus data for request net.wimpi.modbus.msg.ReadInputRegistersRequest@f58f4a. Error: I/O exception - failed to read. Endpoint ModbusSerialSlaveEndpoint@32ac51[portName=/dev/ttyUSB0]. Connection: SerialConnection@108604f[portName=/dev/ttyUSB0,port=/dev/ttyUSB0]
                            2017-11-27 20:17:56.372 [ERROR] [t.wimpi.modbus.io.ModbusRTUTransport] - Last request: 82 04 00 00 00 02 6e 38
                            Parameter meiner Wärmepumpe wären 19200 Baudrate, 8 Databit, 1 Stopbit, Parity none, Geräte-ID 130, Register 230 (möchte ich erstmal auslesen - soll Wert zwischen 100 und 2000 sein)

                            Kommentar


                              #15
                              Kann es sein, dass ein anderes Programm versucht, den Stick zu nutzen? Im englischen Forum hatten wir vorgestern auch so ein Problem, in dem Fall wurde allerdings der Stick (vermutlich per udev) auf einen anderen Namen umgebogen. Der Schuldige war brltty, welches eine Braille Zeile steuert, ist offensichtlich bei debian mit dabei.

                              Vielleicht hilft ein Blick in die Ausgabe von dmesg, um etwas zu erkennen.

                              Kommentar

                              Lädt...
                              X