GithubHelp home page GithubHelp logo

calimero-project / calimero-server Goto Github PK

View Code? Open in Web Editor NEW
51.0 12.0 18.0 2.6 MB

KNXnet/IP server for KNX IP, KNX (RF) USB, FT1.2, and TP-UART

License: Other

Java 99.47% Shell 0.53%
java knx-interface knx-ip

calimero-server's Introduction

Calimero KNXnet/IP Server CI with Gradle

A KNXnet/IP server for running your own KNXnet/IP server in software. The minimum required runtime environment is JDK 17 (java.base).

  • No KNXnet/IP server hardware required
  • Turn a KNX interface into a KNXnet/IP server, e.g., KNX USB or KNX RF USB interfaces, EMI1/2 serial couplers
  • Use KNX IP Secure to secure your client-side KNX IP network traffic
  • Intercept or proxy a KNXnet/IP connection, e.g., for monitoring/debugging purposes
  • Setup a (secure) time server for your KNX network
  • Emulate/virtualize a KNX network

Dependencies

The Calimero KNXnet/IP server requires calimero-core and calimero-device. Optional dependencies, required for serial communication:

  • TP-UART / FT1.2: serial-native (with its JNI libraries), or calimero-rxtx for using any RXTX descendant/compatible library on your platform.
  • KNX USB or KNX RF USB: calimero-usb (and its transitive closure).

Docker image

Pre-built Docker images for running the server are available on Docker Hub. These snapshots might be ahead of the latest release but in general not less stable than releases.

Supported Features

Client-side KNXnet/IP & KNX IP Secure

Note that for KNX IP Secure a keyfile or an ETS keyring (*.knxkeys) is required, see section below.

  • Discovery and self-description
  • Tunneling
  • Routing
  • Busmonitor (for KNX subnet interfaces that do not support a dedicated busmonitor mode, KNXnet/IP bus monitor connections are realized by converting cEMI L-Data to cEMI bus monitor messages)
  • Local device management

KNX subnet side (communication with the KNX bus)

  • KNXnet/IP
  • KNX IP
  • KNX RF USB
  • KNX USB
  • KNX FT1.2 Protocol
  • TP-UART

How-to & Examples

Note, running gradle build (e.g., ./gradlew build) will create build/distributions/calimero-server-*.tar/.zip, which contains a directly executable script and all required dependencies.

Start Server

Before trying the examples below with a configuration, make sure the configuration is appropriate for your KNX setup!

On the terminal, a running server instance can be stopped by typing "stop".

Using Gradle

./gradlew run --args resources/server-config.xml

Using Maven

mvn exec:java -Dexec.args=resources/server-config.xml

Using Java

Make sure all required jar packages are available, and any referenced files in the folder resources are found (e.g., copy them into the current working directory)

# Either, assuming all jar dependencies are located in the current working directory
java -cp "./*" io.calimero.server.Launcher server-config.xml

# Or, a minimal working example with explicit references to jars (adjust as required)
java -cp "calimero-server-3.0-SNAPSHOT.jar:calimero-core-3.0-SNAPSHOT.jar:calimero-device-3.0-SNAPSHOT.jar" io.calimero.server.Launcher server-config.xml

Server Configuration

A working example of an XML server configuration can be found here.

Description of the supported XML elements and attributes:

  • <knxServer name="knx-server" friendlyName="My KNXnet/IP Server"> (required): specifies the server ID (for logging etc.) and the KNXnet/IP friendly name (for discovery & self-description)

    • name="knx-server": Attribute to specify the internal name of the server (mainly for logging, naming, debugging purposes)
    • friendlyName="My KNXnet/IP Server": Attribute to specify a custom name (max. 30 characters). Will be displayed in e.g. ETS.
    • appData="/path/to/app/dir" (optional): base directory to load/save server application data, by default this is the empty path. The path might start with ~, expanded to the Java system property "user.home". The server's interface object server (IOS) data is stored in this directory between restarts. The <serviceContainer> attributes keyfile and keyring are resolved against this directory if they contain a relative path.
  • <discovery listenNetIf="all" outgoingNetIf="all" activate="true"/> (optional attributes): the network interfaces to listen for KNXnet/IP discovery requests, as well as the network interfaces to answer requests, e.g., "all", "any", or "lo,eth0,eth1". The attribute activate allows to disable KNXnet/IP discovery & self-description. If disabled, any received discovery or descriptions request will be ignored.

  • <serviceContainer> (1..*): specify a server service container, i.e., the client-side endpoint for a KNX subnet. Attributes:

    • activate: enable/disable the service container, to load/ignore that container during server startup
    • routing: if true activate KNX IP routing, if false routing is disabled
    • networkMonitoring: serve tunneling connection on KNX busmonitor layer (set true) or deny such connection requests (set false)
    • udpPort (optional): UDP port of the control endpoint to listen for incoming connection requests of that service container, defaults to KNXnet/IP standard port "3671". Use different ports if more than one service container is deployed.
    • listenNetIf (optional): network adapter to listen for connection requests, e.g., "any" or "eth1", defaults to host default network adapter. any - the first available (non-loopback) network adapter is chosen depending on your OS network setup (or localhost setting).
    • reuseCtrlEP (optional): use the KNXnet/IP control endpoint (UDP/IP) for tunneling connections, false by default. If reuse is enabled (set true), no list of additional KNX individual addresses is required (see below). Per the KNX standard, reuse is only possible if the control endpoint's individual address is not yet assigned to a connection, and if KNXnet/IP routing is not activated. This implies that by reusing the control endpoint, at most 1 connection can be established at a time to a service container.
    • keyfile="~/.knx/keyfile" (required for KNX IP Secure): path to a keyfile containing the KNX IP Secure keys, alternatively specify a keyring. See below for the keyfile layout.
    • keyring="/path/to/keyring.knxkeys" (required for KNX IP Secure): path to a keyring exported from ETS containing the KNX IP Secure keys. The keyfile typically contains the password to decrypt the keyring, otherwise the server will try to query the keyring password from the system console during startup.
    • securedServices (optional): specify a set of required KNXnet/IP secure services. Supported values are a combination of devmgmt, tunneling, and routing. A value of optional configures secured services, but clients can also use unsecure communication. If this attribute is not used, by default the server requires KNXnet/IP secure services as supplied by a keyring/keyfile.
  • <knxAddress type="individual">7.1.0</knxAddress>: the individual address of the service container (has to match the KNX subnet!)

    • type="individual": indicates a device address.
    • x.y.z: Address of the service container, will be visible in e.g. ETS-tool. If routing is activated, requires a coupler/backbone address (x.y.0 or x.0.0).
  • <disruptionBuffer expirationTimeout="30" udpPort="5555-5559" />: When disruptionBuffer is activated, missed KNX subnet frames due to a disrupted client link will be replayed when the client connection is reestablished.

    • expirationTimeout="30": Attribute allows to specify the time in seconds how long the server will keep frames before discarding them after a connection was disrupted.
    • udpPort="5555-5559": The disruption buffer is only available for clients which connect via the specified (client-side) UDP port range. All other clients are ignored.
  • <routing>224.0.23.12</routing> (optional): the multicast setup used by the service container for KNX IP (Secure) routing, defaults to the IP multicast address 224.0.23.12. (If the routing attribute of the service container is set to false, this setting has no effect.)
    Optional attributes for secure routing:

    • latencyTolerance="1000": time window for accepting secure multicasts (in milliseconds), depends on the max. end-to-end network latency
  • <knxSubnet> settings of the KNX subnet the service container shall communicate with. The knxSubnet element text contains identifiers specific to the KNX subnet interface type, i.e., IP address[:port] for IP-based interfaces, or USB interface name/ID for KNX USB interfaces, constructor arguments for user-supplied network links, .... Attributes:

    • type: interface type to the KNX subnet, one of:
      • udp: the KNX subnet is connected via a UDP KNXnet/IP tunneling connection
      • tcp: the KNX subnet is connected via a TCP KNXnet/IP tunneling connection
      • knxip: the KNX subnet is connected via KNX IP or KNXnet/IP routing
      • usb: connect to subnet via a USB device, if the device name/ID is left empty, the first USB device found will be used
      • ft12: use a FT1.2 protocol connection with EMI2 format (specify the format attribute for cEMI exchange format)
      • tpuart: use a TP-UART adapter to connect to a KNX TP1 network
      • virtual: run KNX subnet and enable the connection of virtual and real devices
      • emulate: emulates the behaviour of a KNX subnet for process communication. KNX datapoints may be specified in an accompanying datapoint XML file.
        If no datapoint file is configured, the emulation behavior is as follows: once a datapoint value is written to the subnet, it is added to the list of known datapoints, available for subsequent process communication.
      • user: own programmed connections may be added here
    • medium (optional): KNX transmission medium, one of "tp1" (default), "pl110", "knxip", "rf"
      • tp1: Twisted pair (transmission with 9600 Baud as specified in the KNX standard)
      • pl110: use power-line to connect
      • knxip: access via Ethernet
      • rf: Wireless connection via 868 MHz
    • format (optional): useful for knx interfaces which support different exchange formats; recognized values are "" (default), "baos", or "cemi"
    • knxAddress (optional): override the knx source address used in a frame dispatched to the knx subnet, used for knx interfaces which expect a specific address (e.g., "0.0.0")
    • netif (tunneling only, optional): server network interface for tunneling to KNX subnet
    • useNat (UDP tunneling only, optional): use network address translation (NAT)
    • listenNetIf (KNX IP only): network interface for KNX IP communication with the KNX subnet
    • domainAddress (open media only): domain address for power-line or RF transmission medium
    • class (user-supplied KNX subnet type only): class name of a user-supplied KNXNetworkLink to use for subnet communication
  • <datapoints ref="resources/datapointMap.xml" /> (only applies to subnet emulation, i.e., type=emulate): External file to describe the KNX datapoints to be used in the emulated network.

    • ref: relative path to XML file
  • <groupAddressFilter>: Contains a (possibly empty) list of KNX group addresses, which represents the server group address filter applied to messages for that service container. An empty filter list does not filter any messages. Only messages with their group address in the filter list will be forwarded.

  • <additionalAddresses>: Contains a (possibly empty) list of KNX individual addresses, which are assigned to KNXnet/IP tunneling connections. An individual address has to match the KNX subnet (area, line), otherwise it will not be used! If no additional addresses are provided, the service container individual address is used, and the maximum of open tunneling connections at a time is limited to 1.

  • <tunnelingUsers> (optional, only required for KNX IP secure tunneling if no keyring is used): contains a mapping of KNX IP Secure user IDs to permitted tunneling addresses.

    • <user id="id">: a user ID in the integer range [1..127], with <knxAddress> elements listing the permitted individual addresses assigned to client-side tunneling connections of that user.
      • <knxAddress type="individual">x.y.z</knxAddress>: additional address entry
  • <timeServer>: Cyclically transmit date (DPT 11.001), time (DPT 10.001), or date+time (DPT 19.001) information on the KNX subnet and server-side. The date/time datapoints are configured using <datapoint stateBased="true" ...> elements. Time-server values are sent secured if the datapoint destination is in the keyring.

Configuration Examples for KNX subnets

  • Turn a PL110 USB interface into a KNXnet/IP server, the USB interface name matches 'busch-jaeger'

    <knxSubnet type="usb" medium="pl110" domainAddress="6f">busch-jaeger</knxSubnet>

  • Use the KNXnet/IP server to communicate with a KNX IP network

    <knxSubnet type="knxip" listenNetIf="eth4">224.0.23.12</knxSubnet>

  • Load a user-supplied KNXNetworkLink class to communicate with the KNX subnet (the element text is parsed into constructor arguments of type String, using separators ',' and '|')

    <knxSubnet type="user-supplied" class="my.knx.SubnetLink">o1,i2|i4</knxSubnet>

  • Provide a KNXnet/IP server for a KNX RF USB connection, using the USB vendor:product ID

    <knxSubnet type="usb" medium="rf" domainAddress="000000004b01">0409:005a</knxSubnet>

KNX IP Secure

Running the server with KNX IP Secure requires a keyring (*.knxkeys) exported from ETS, or a keyfile. A keyfile contains

  • a group key if the server should use KNX IP Secure multicast communication
  • a device key and user keys if the server should use KNX IP Secure unicast communication (tunneling on link-layer and busmonitor-layer, device management)

Example keyfile:

// group key is a 16 byte hex value 
group.key=BEEF5A1ADBEEF5A1ADBEEF5A1ADBEEF5
// device key is a 16 byte hex value
device.key=0102030405060708090a0b0c0d0e0f10
// for secure unicast, specify at least user 1 & 2 (max. 127); user 1 is used for management access
// user pwd or key, key is a 16 byte hex value (empty value means default setup key)
user[1].key=
user[2].key=d6da71bd89f7e8426250fe5657da900c
user[3].pwd=Joshua
user[4].key=...

Keyfile holding the keyring password:

keyring.pwd=Joshua

Launcher Code

The KNXnet/IP server startup code is in Launcher.java, a Java Runnable which also loads the server configuration (use the server-config.xml configuration template located in the folder resources). The launcher expects a URI or file name pointing to the XML server configuration. To run the KNXnet/IP server and gateway directly in Java code, see the implementation and Javadoc of Launcher.java.

Logging

Calimero KNXnet/IP server uses the System.Logger. Bind any desired logging frameworks of your choice.

calimero-server's People

Contributors

bmalinowsky avatar calimero-project avatar georgferdinandschneider avatar lukasvermeer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

calimero-server's Issues

Group monitor works but Bus monitor doesn't with USB interface

My setup is Windows 8.1 32 bit, calimero-server from the Java 8 branch, a KNX USB interface.
Connecting from ETS3 and activating the group monitor works, but if I activate the bus monitor I get this exception

[main] INFO calimero.server - Discovery service network interfaces:
[main] INFO calimero.server - listen on all
[main] INFO calimero.server - outgoing all
[main] INFO calimero.server - Service container 147b:5120:
[main] INFO calimero.server - IPv4 UDP host 192.168.1.133 port 3671 routing false
[main] INFO calimero.server - usb connection, TP1 medium, device 1.0.248
[main] INFO calimero.server - GrpAddrFilter []
[main] INFO calimero.server - connect to 147b:5120
[main] INFO calimero.usb - Found KNX devices:
|--Bus 001 Device 003: ID 147b:5120
[main] INFO calimero.usb.147b:5120 - Bus 001 Device 003: ID 147b:5120
[main] INFO calimero.link.147b:5120 - Device Mask Version 0012 - System 1 (BCU 1)
[main] INFO calimero.link.147b:5120 - PEI type 1
[main] INFO calimero.link.147b:5120 - KNX individual address 1.0.253
[main] INFO calimero.link.147b:5120 - hop count set to 6
[main] INFO Calimero KNX server gateway - main-line group address forward setting set to 1
[main] INFO Calimero KNX server gateway - sub-line group address forward setting set to 1
[Calimero KNX server gateway] INFO knx-server - launch KNXnet/IP server My KNXnet/IP Server
[knx-server control endpoint 147b:5120] INFO knx-server - knx-server control endpoint 147b:5120 is up and running
[knx-server control endpoint 147b:5120] WARN knx-server - received disconnect request with unknown channel id 1 - ignored
[knx-server control endpoint 147b:5120] INFO knx-server - 147b:5120: setup data endpoint (channel 1) for connection request from /192.168.1.134:63229
[knx-server control endpoint 147b:5120] INFO knx-server - assigning additional individual address 1.0.249
[knx-server control endpoint 147b:5120] WARN calimero.usb.147b:5120 - close connection
javax.usb.UsbPlatformException: USB error 5: Unable to release interface: Entity not found
at org.usb4java.javax.ExceptionUtils.createPlatformException(ExceptionUtils.java:39)
at org.usb4java.javax.AbstractDevice.releaseInterface(AbstractDevice.java:455)
at org.usb4java.javax.Interface.release(Interface.java:113)
at tuwien.auto.calimero.serial.usb.UsbConnection.close(UsbConnection.java:647)
at tuwien.auto.calimero.serial.usb.UsbConnection.close(UsbConnection.java:554)
at tuwien.auto.calimero.link.AbstractLink.close(AbstractLink.java:293)
at tuwien.auto.calimero.server.gateway.KnxServerGateway$KNXnetIPServerListener.closeLink(KnxServerGateway.java:322)
at tuwien.auto.calimero.server.gateway.KnxServerGateway$KNXnetIPServerListener.acceptDataConnection(KnxServerGateway.java:189)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.lambda$acceptConnection$5(KNXnetIPServer.java:2411)
at java.util.stream.MatchOps$1MatchSink.accept(Unknown Source)
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(Unknown Source)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.allMatch(Unknown Source)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.acceptConnection(KNXnetIPServer.java:2411)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.initNewConnection(KNXnetIPServer.java:2389)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.handleServiceType(KNXnetIPServer.java:2142)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ServiceLoop.onReceive(KNXnetIPServer.java:1476)
at tuwien.auto.calimero.internal.UdpSocketLooper.loop(UdpSocketLooper.java:134)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ServiceLoop.run(KNXnetIPServer.java:1447)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$LooperThread.run(KNXnetIPServer.java:1665)
[knx-server control endpoint 147b:5120] INFO calimero.link.147b:5120 - link closed
[knx-server control endpoint 147b:5120] INFO calimero.usb.147b:5120 - Bus 001 Device 003: ID 147b:5120
[knx-server control endpoint 147b:5120] ERROR calimero.link - initial connection attempt
tuwien.auto.calimero.KNXException: open USB connection
at tuwien.auto.calimero.serial.usb.UsbConnection.(UsbConnection.java:405)
at tuwien.auto.calimero.serial.usb.UsbConnection.(UsbConnection.java:375)
at tuwien.auto.calimero.link.KNXNetworkMonitorUsb.(KNXNetworkMonitorUsb.java:98)
at tuwien.auto.calimero.server.gateway.SubnetConnector.lambda$openMonitorLink$16(SubnetConnector.java:283)
at tuwien.auto.calimero.link.Connector$Link.connect(Connector.java:446)
at tuwien.auto.calimero.link.Connector$Link.(Connector.java:219)
at tuwien.auto.calimero.link.Connector$Link.(Connector.java:176)
at tuwien.auto.calimero.link.Connector.newMonitor(Connector.java:172)
at tuwien.auto.calimero.server.gateway.SubnetConnector.openMonitorLink(SubnetConnector.java:297)
at tuwien.auto.calimero.server.gateway.KnxServerGateway$KNXnetIPServerListener.acceptDataConnection(KnxServerGateway.java:190)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.lambda$acceptConnection$5(KNXnetIPServer.java:2411)
at java.util.stream.MatchOps$1MatchSink.accept(Unknown Source)
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(Unknown Source)
at java.util.stream.ReferencePipeline.forEachWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(Unknown Source)
at java.util.stream.MatchOps$MatchOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.allMatch(Unknown Source)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.acceptConnection(KNXnetIPServer.java:2411)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.initNewConnection(KNXnetIPServer.java:2389)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ControlEndpointService.handleServiceType(KNXnetIPServer.java:2142)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ServiceLoop.onReceive(KNXnetIPServer.java:1476)
at tuwien.auto.calimero.internal.UdpSocketLooper.loop(UdpSocketLooper.java:134)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$ServiceLoop.run(KNXnetIPServer.java:1447)
at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer$LooperThread.run(KNXnetIPServer.java:1665)
Caused by: javax.usb.UsbClaimException: An interface is already claimed
at org.usb4java.javax.AbstractDevice.claimInterface(AbstractDevice.java:404)
at org.usb4java.javax.Interface.claim(Interface.java:102)
at tuwien.auto.calimero.serial.usb.UsbConnection.open(UsbConnection.java:608)
at tuwien.auto.calimero.serial.usb.UsbConnection.(UsbConnection.java:389)
... 27 more
[main] INFO Calimero KNX server gateway - knx-server: user request for shutdown

Also other functions doesn't work:

  • trying to download a program make the server continuosly print
    [Calimero KNX server gateway] WARN Calimero KNX server gateway - no active KNXnet/IP connection for destination 1.0.253
  • trying to download an address the server never detects the pressed button
  • diagnotics/individual addresses doesn't work, no error or warning but it doesn't detect nothing.

How to use Calimero with KNX Raspberry Pi HAT properly? ETS fails

I am trying to use https://www.tindie.com/products/cpu20/knx-raspberry-pi-hat/ (without installing knxd) for Raspberry Pi 3 Model B Rev 1.2

I've changed my previous config to this:
<knxSubnet type="tpuart" medium="tp1">/dev/ttyAMA0</knxSubnet>

I also followed some steps according to https://hackaday.io/project/171850/instructions

  • Free port: sudo raspi-config3 Interface OptionsI6 Serial Port → Login shell = No, Hardware enabled = Yes;
  • Disable Bluetooth: sudo nano /boot/config.txt → check enable_uart=1 + add dtoverlay=disable-bt
  • Execute: sudo systemctl stop hciuart.service + sudo systemctl disable hciuart.service

Now Calimero seems to work fine in both tunnel and router modes: I can send reads, I hear responses, and I can write.

But I fail to flush/download a device configuration with ETS!
Previously, with USB connection I had to set-up my Calimero interface as a Coupler between TP and IP (in line properties inside ETS), otherwise only "Full" download worked (with pressing of the programming button); but a normal flushing failed.

Now I'm sure I have set this up correctly, but ETS fails to configure a device anyhow: neither tunnel nor multicast, and cannot complete an individual address change.
But Group/Bus monitors are working!

What have I missed?

After attempts to establish a tunnel in ETS sometimes Calimero stops accepting tunnel requests anymore.
I see in logs

[DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: received TP1 L-Data (length 10): 14 8b bc 11 04 32 01 e1 00 40
[ERROR  ] io.calimero.serial.tpuart:/dev/ttyAMA0: error creating L-Data from TP1 data (length 14 8b bc 11 04 32 01 e1 00 40): java.lang.IllegalArgumentException: fromIndex(0) > toIndex(-2)

But I'm not sure that it's the main error here.

More logs:
WARNING: Unknown module: io.calimero.serial.provider.rxtx specified to --add-reads
13:40:01.385 [TRACE  ] io.calimero.xml.XmlResolver: resolve server-config.xml
13:40:01.394 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:40:02.204 [TRACE  ] io.calimero.xml.XmlResolver: resolve jar:file:///usr/app/calimero-server-3.0-SNAPSHOT/lib/calimero-core-3.0-SNAPSHOT.jar!/properties.xml
13:40:02.224 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:40:02.722 [DEBUG  ] io.calimero.device.knx-server: loading interface object server from file:///usr/app/knx-server-ios.xml
13:40:02.731 [TRACE  ] io.calimero.xml.XmlResolver: resolve file:///usr/app/knx-server-ios.xml
13:40:02.737 [DEBUG  ] io.calimero.device.knx-server: no interface object server resource, create resource on closing device: /usr/app/knx-server-ios.xml (No such file or directory)
13:40:02.998 [INFO   ] io.calimero.server.knx-server: Calimero KNX IP server v3.0-SNAPSHOT
13:40:03.172 [INFO   ] io.calimero.server.knx-server: use configuration 'Calimero KNX' with 1 service container, discovery: listen on [eth0] send on [eth0] interfaces
service container /dev/ttyAMA0:
	server: listen on eth0 (port 3671), KNX IP routing multicast group 224.0.23.12
	Tpuart /dev/ttyAMA0 connection: TP1 medium, device 6.6.0
13:40:03.241 [DEBUG  ] io.calimero.server.knx-server: setup Tpuart subnet {1}
13:40:03.326 [INFO   ] io.calimero.server.gateway.knx-server: activate '/dev/ttyAMA0' disruption buffer on ports [5,555-5,559], disruption timeout 30 s
13:40:03.346 [TRACE  ] io.calimero.device.knx-server: sync Addresstable Object from address 0x116
13:40:03.350 [TRACE  ] io.calimero.device.knx-server: sync Associationtable Object from address 0x1000
13:40:03.354 [TRACE  ] io.calimero.device.knx-server: sync Group Object Table Object from address 0x3000
type 'stop' to stop the gateway and shutdown the server
13:40:03.629 [TRACE  ] io.calimero.server.knx-server: network stack uses IPv4 addresses: unknown
13:40:03.732 [TRACE  ] io.calimero.server.knx-server: found network interfaces eth0 [192.168.31.22]
13:40:03.738 [INFO   ] io.calimero.server.knx-server: discovery endpoint [eth0] is up and running
13:40:03.748 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 control endpoint bound to 192.168.31.22:3671
13:40:03.760 [DEBUG  ] io.calimero.knxnetip.KNXnet/IP Routing 224.0.23.12:3671: join multicast group 224.0.23.12 on eth0
13:40:03.763 [TRACE  ] io.calimero.serial.ConnectionFactory: instantiate service provider io.calimero.serial.provider.jni.TtySerialComProvider
13:40:03.764 [INFO   ] io.calimero.knxnetip.KNXnet/IP Routing 224.0.23.12:3671: multicast loopback mode enabled
13:40:03.779 [TRACE  ] io.calimero.serial.provider.jni: check Java library path /usr/java/packages/lib:/lib:/usr/lib
13:40:03.786 [DEBUG  ] io.calimero.serial.provider.jni: opening serial port /dev/ttyAMA0
13:40:03.793 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 KNX IP routing service (eth0 224.0.23.12) is up and running
13:40:03.846 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 secure mgmt/tunneling connections: optional/optional
13:40:03.890 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 tcp service (eth0 192.168.31.22:3671) is up and running
13:40:03.897 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 control endpoint (eth0 192.168.31.22:3671) is up and running
13:40:03.922 [DEBUG  ] io.calimero.serial.ConnectionFactory: io.calimero.serial.provider.jni.TtySerialComProvider@97bbb8 port setup: baudrate 19200, even parity, 8 databits, 1 stopbits, timeouts: read 0 read total 0 constant 100 write total 0 write constant 0
13:40:03.943 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: drained rx queue (0 bytes)
13:40:03.947 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset TP-UART controller
13:40:03.952 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART reset.ind
13:40:03.958 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,376 us
13:40:03.962 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: wait for initial TP-UART state
13:40:03.972 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:03.977 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 343 us
13:40:03.986 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: hop count set to 6
13:40:03.996 [DEBUG  ] io.calimero.server.gateway.knx-server: set maximum APDU length of '/dev/ttyAMA0' to 15
13:40:04.090 [DEBUG  ] io.calimero.event: unsupported event type void io.calimero.server.gateway.KnxServerGateway$SubnetListener.connectionStatus(io.calimero.serial.ConnectionStatus)
13:40:04.094 [DEBUG  ] io.calimero.event: unsupported event type void io.calimero.server.gateway.KnxServerGateway$SubnetListener.baosService(io.calimero.baos.BaosService)
13:40:04.962 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:48864 on [any]
13:40:04.971 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:48864 on [any]
13:40:07.419 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 05 00 1a 08 01 00 00 00 00 00 00 08 01 00 00 00 00 00 00 04 04 02 00
13:40:07.429 [DEBUG  ] io.calimero.server.knx-server: responses to client use route-back control endpoint 192.168.31.101:5559
13:40:07.433 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0: setup data endpoint (UDP NAT, channel 1) for connection request from 192.168.31.101:5559
13:40:07.436 [DEBUG  ] io.calimero.server.knx-server: responses use route-back data endpoint 192.168.31.101:5559
13:40:07.457 [INFO   ] io.calimero.server.knx-server: assign additional individual address 6.6.2 to channel 1
13:40:07.462 [DEBUG  ] io.calimero.server.knx-server: created socket on 192.168.31.22:35069
13:40:07.550 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2) is up and running
13:40:07.556 [DEBUG  ] io.calimero.server.gateway.knx-server: established connection KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2)
13:40:07.560 [DEBUG  ] io.calimero.server.gateway.ReplayBuffer: activate replay buffer for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2)
13:40:07.649 [INFO   ] io.calimero.server.gateway.ReplayBuffer: match for Key[hostAddress=192.168.31.101, port=5559, timestamp=1713015607563] in open connections with missing events: []
13:40:07.653 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 07 00 10 01 00 08 01 00 00 00 00 00 00
13:40:07.659 [TRACE  ] io.calimero.server.knx-server: received connection-state request (channel 1) from 192.168.31.101:5559
13:40:08.632 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:08.641 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:09.002 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,492 us
13:40:09.006 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:09.009 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,817 us
13:40:10.426 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 20 00 15 04 01 00 00 11 00 bc e0 66 d3 32 01 01 00 00
13:40:10.445 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 21 00 0a 04 01 00 00
13:40:10.462 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 20 00 15 04 01 01 00 11 00 bc e0 66 d3 31 01 01 00 81
13:40:10.466 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 21 00 0a 04 01 01 00
13:40:10.471 [TRACE  ] io.calimero.server.gateway.knx-server: server-side KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2): 6.6.211->6/2/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 00: T_Group, A_Group.read
13:40:10.480 [TRACE  ] io.calimero.server.gateway.knx-server: send positive cEMI L_Data.con
13:40:10.490 [DEBUG  ] io.calimero.server.gateway.knx-server: dispatch 6.6.211->6/2/1 using KNX IP routing service (eth0 224.0.23.12)
13:40:10.499 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 00
13:40:10.510 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 32 01 01 00 00
13:40:10.515 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending cEMI frame seq 0, WaitForAck, attempt 1 (channel 1) 06 10 04 20 00 15 04 01 00 00 2e 00 bc e0 66 d3 32 01 01 00 00
13:40:10.517 [TRACE  ] io.calimero.server.gateway.knx-server: forward 6.6.211->6/2/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 00 to all tunneling clients (except 6.6.211)
13:40:10.518 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 00
13:40:10.518 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 20 00 15 04 01 00 00 2e 00 bc e0 66 d3 32 01 01 00 00
13:40:10.523 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 00
13:40:10.528 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 21 00 0a 04 01 00 00
13:40:10.528 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 32 01 01 00 00
13:40:10.533 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 00
13:40:10.534 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: received service ack 0 from 192.168.31.101:5559 (channel 1)
13:40:10.542 [TRACE  ] io.calimero.server.gateway.knx-server: dispatch to subnet /dev/ttyAMA0: 6.6.211->6/2/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 00
13:40:10.544 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: send (wait for confirmation) 6.6.211->6/2/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 00
13:40:10.550 [TRACE  ] io.calimero.link.tpuart:/dev/ttyAMA0: send cEMI 11 00 bc d0 66 d3 32 01 01 00 00
13:40:10.555 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: create UART services 80 bc 81 66 82 d3 83 32 84 01 85 d1 86 00 87 00 48 14
13:40:10.558 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write UART services, waiting for .con
13:40:10.582 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 1,577,458 us
13:40:10.612 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/2/1
13:40:10.615 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 299 us
13:40:10.619 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 30,000 us
13:40:10.623 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 29,581 us, char 0x0, discard partial frame (length 6) bc 66 d3 32 01 d1
13:40:10.626 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 351 us
13:40:10.629 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 48 us
13:40:10.633 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 6 bytes after 1,757 us
13:40:10.636 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 1,948 us
13:40:10.640 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 82 us
13:40:10.643 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 51 us
13:40:10.646 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: received TP1 L-Data (length 10): 14 8b bc 11 04 32 01 e1 00 40
13:40:10.649 [ERROR  ] io.calimero.serial.tpuart:/dev/ttyAMA0: error creating L-Data from TP1 data (length 14 8b bc 11 04 32 01 e1 00 40): java.lang.IllegalArgumentException: fromIndex(0) > toIndex(-2)
13:40:10.652 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 937 us
13:40:10.655 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 1,584 us
13:40:10.661 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/2/1
13:40:10.665 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 211 us
13:40:10.668 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 34,243 us
13:40:10.673 [WARNING] io.calimero.server.gateway.knx-server: timeout sending to 6/2/1: no ACK for L-Data.con
13:40:10.672 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 30,358 us, char 0x0, discard partial frame (length 6) 9c 11 04 32 01 e1
13:40:10.676 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 385 us
13:40:10.676 [TRACE  ] io.calimero.server.gateway.knx-server: server-side KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2): 6.6.211->6/1/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 81: T_Group, A_Group.write
13:40:10.680 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 51 us
13:40:10.681 [TRACE  ] io.calimero.server.gateway.knx-server: send positive cEMI L_Data.con
13:40:10.683 [DEBUG  ] io.calimero.server.gateway.knx-server: dispatch 6.6.211->6/1/1 using KNX IP routing service (eth0 224.0.23.12)
13:40:10.683 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 39 us
13:40:10.685 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 81
13:40:10.686 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: no ACK received after 83 ms
13:40:10.687 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending cEMI frame seq 1, WaitForAck, attempt 1 (channel 1) 06 10 04 20 00 15 04 01 01 00 2e 00 bc e0 66 d3 31 01 01 00 81
13:40:10.691 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 20 00 15 04 01 01 00 2e 00 bc e0 66 d3 31 01 01 00 81
13:40:10.691 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 31 01 01 00 81
13:40:10.696 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 81
13:40:10.699 [TRACE  ] io.calimero.server.gateway.knx-server: forward 6.6.211->6/1/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 81 to all tunneling clients (except 6.6.211)
13:40:10.702 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 81
13:40:10.702 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 21 00 0a 04 01 01 00
13:40:10.707 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: received service ack 1 from 192.168.31.101:5559 (channel 1)
13:40:10.707 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 31 01 01 00 81
13:40:10.712 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 81
13:40:10.712 [TRACE  ] io.calimero.server.gateway.knx-server: dispatch to subnet /dev/ttyAMA0: 6.6.211->6/1/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 81
13:40:10.716 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: send (wait for confirmation) 6.6.211->6/1/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 81
13:40:10.719 [TRACE  ] io.calimero.link.tpuart:/dev/ttyAMA0: send cEMI 11 00 bc d0 66 d3 31 01 01 00 81
13:40:10.722 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: create UART services 80 bc 81 66 82 d3 83 31 84 01 85 d1 86 00 87 81 48 96
13:40:10.725 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write UART services, waiting for .con
13:40:10.781 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/1/1
13:40:10.786 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 77 us
13:40:10.789 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 30,049 us
13:40:10.789 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: confirmation of 6/1/1
13:40:10.793 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 29,960 us, char 0x0, discard partial frame (length 6) bc 66 d3 31 01 d1
13:40:10.796 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 190 us
13:40:10.799 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 41 us
13:40:10.803 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 39 us
13:40:10.805 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: positive L_Data.con
13:40:10.808 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: ACK received after 30 ms
13:40:10.812 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: cEMI (length 11): 2e 00 bc d0 66 d3 31 01 01 00 81
13:40:10.815 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 10,528 us
13:40:10.912 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/2/1
13:40:10.915 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 78 us
13:40:10.919 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 26,519 us
13:40:10.923 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 22,627 us, char 0x0, discard partial frame (length 6) bc 11 04 32 01 e1
13:40:10.927 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 192 us
13:40:10.931 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 41 us
13:40:10.934 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 38 us
13:40:12.390 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:39522 on [any]
13:40:12.398 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:39522 on [any]
13:40:14.032 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 3,119,394 us
13:40:14.035 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:14.038 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 307 us
13:40:15.435 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 20 00 15 04 01 02 00 11 00 bc e0 66 d3 31 01 01 00 80
13:40:15.439 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 21 00 0a 04 01 02 00
13:40:15.445 [TRACE  ] io.calimero.server.gateway.knx-server: server-side KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2): 6.6.211->6/1/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 80: T_Group, A_Group.write
13:40:15.446 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 20 00 15 04 01 03 00 11 00 bc e0 66 d3 32 01 01 00 80
13:40:15.449 [TRACE  ] io.calimero.server.gateway.knx-server: send positive cEMI L_Data.con
13:40:15.449 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 21 00 0a 04 01 03 00
13:40:15.451 [DEBUG  ] io.calimero.server.gateway.knx-server: dispatch 6.6.211->6/1/1 using KNX IP routing service (eth0 224.0.23.12)
13:40:15.454 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.456 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending cEMI frame seq 2, WaitForAck, attempt 1 (channel 1) 06 10 04 20 00 15 04 01 02 00 2e 00 bc e0 66 d3 31 01 01 00 80
13:40:15.458 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 31 01 01 00 80
13:40:15.461 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 20 00 15 04 01 02 00 2e 00 bc e0 66 d3 31 01 01 00 80
13:40:15.462 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.463 [TRACE  ] io.calimero.server.gateway.knx-server: forward 6.6.211->6/1/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 80 to all tunneling clients (except 6.6.211)
13:40:15.467 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.471 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 31 01 01 00 80
13:40:15.475 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 21 00 0a 04 01 02 00
13:40:15.475 [TRACE  ] io.calimero.server.gateway.knx-server: dispatch to subnet /dev/ttyAMA0: 6.6.211->6/1/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 80
13:40:15.475 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/1/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.480 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: send (wait for confirmation) 6.6.211->6/1/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 80
13:40:15.480 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: received service ack 2 from 192.168.31.101:5559 (channel 1)
13:40:15.483 [TRACE  ] io.calimero.link.tpuart:/dev/ttyAMA0: send cEMI 11 00 bc d0 66 d3 31 01 01 00 80
13:40:15.486 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: create UART services 80 bc 81 66 82 d3 83 31 84 01 85 d1 86 00 87 80 48 97
13:40:15.489 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write UART services, waiting for .con
13:40:15.522 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 1,489,756 us
13:40:15.551 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/1/1
13:40:15.552 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: confirmation of 6/1/1
13:40:15.555 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 67 us
13:40:15.558 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 30,132 us
13:40:15.559 [TRACE  ] io.calimero.server.gateway.knx-server: server-side KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2): 6.6.211->6/2/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 80: T_Group, A_Group.write
13:40:15.562 [TRACE  ] io.calimero.server.gateway.knx-server: send positive cEMI L_Data.con
13:40:15.562 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 29,935 us, char 0x0, discard partial frame (length 6) bc 66 d3 31 01 d1
13:40:15.564 [DEBUG  ] io.calimero.server.gateway.knx-server: dispatch 6.6.211->6/2/1 using KNX IP routing service (eth0 224.0.23.12)
13:40:15.566 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 241 us
13:40:15.567 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.568 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending cEMI frame seq 3, WaitForAck, attempt 1 (channel 1) 06 10 04 20 00 15 04 01 03 00 2e 00 bc e0 66 d3 32 01 01 00 80
13:40:15.570 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 45 us
13:40:15.572 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 20 00 15 04 01 03 00 2e 00 bc e0 66 d3 32 01 01 00 80
13:40:15.573 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 32 01 01 00 80
13:40:15.573 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 39 us
13:40:15.576 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: positive L_Data.con
13:40:15.577 [TRACE  ] io.calimero.server.gateway.knx-server: forward 6.6.211->6/2/1 L_Data.req, low priority hop count 6 repeat, tpdu 00 80 to all tunneling clients (except 6.6.211)
13:40:15.577 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.580 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: cEMI (length 11): 2e 00 bc d0 66 d3 31 01 01 00 80
13:40:15.582 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.583 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: ACK received after 32 ms
13:40:15.586 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,449 us
13:40:15.586 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc e0 66 d3 32 01 01 00 80
13:40:15.591 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 6.6.211->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.591 [TRACE  ] io.calimero.server.gateway.knx-server: dispatch to subnet /dev/ttyAMA0: 6.6.211->6/2/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 80
13:40:15.596 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: send (wait for confirmation) 6.6.211->6/2/1 L_Data.req, low priority hop count 5 repeat, tpdu 00 80
13:40:15.596 [WARNING] io.calimero.serial.tpuart:/dev/ttyAMA0: 4 partial frames discarded, increase max. inter-byte delay to 5,750 us
13:40:15.598 [TRACE  ] io.calimero.link.tpuart:/dev/ttyAMA0: send cEMI 11 00 bc d0 66 d3 32 01 01 00 80
13:40:15.599 [DEBUG  ] io.calimero.link.tpuart:/dev/ttyAMA0: indication 1.1.4->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80
13:40:15.601 [TRACE  ] io.calimero.server.gateway.knx-server: subnet /dev/ttyAMA0: 1.1.4->6/2/1 L_Data.ind, low priority hop count 6, tpdu 00 80: T_Group, A_Group.write
13:40:15.602 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 128 us
13:40:15.606 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 8,294 us
13:40:15.609 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 110 us
13:40:15.612 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 57 us
13:40:15.615 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: received TP1 L-Data (length 9): bc 11 04 32 01 e1 00 80 04
13:40:15.619 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: cEMI (length 11): 29 00 bc e0 11 04 32 01 01 00 80
13:40:15.621 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: create UART services 80 bc 81 66 82 d3 83 32 84 01 85 d1 86 00 87 80 48 94
13:40:15.624 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 8,479 us
13:40:15.630 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 21 00 0a 04 01 03 00
13:40:15.633 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/2/1
13:40:15.635 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: received service ack 3 from 192.168.31.101:5559 (channel 1)
13:40:15.636 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 86 us
13:40:15.640 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 29,393 us
13:40:15.644 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 24,500 us, char 0x0, discard partial frame (length 6) 9c 11 04 32 01 e1
13:40:15.647 [TRACE  ] io.calimero.server.gateway.ReplayBuffer: record io.calimero.FrameEvent[source=Tpuart link tpuart:/dev/ttyAMA0 TP1 medium, device 6.6.0, hopcount 6] as event '3,228,589,164,001'
13:40:15.647 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 262 us
13:40:15.650 [DEBUG  ] io.calimero.server.gateway.knx-server: dispatch 1.1.4->6/2/1 to all server-side connections
13:40:15.650 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 49 us
13:40:15.653 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): add to multicast loopback frame buffer: 1.1.4->6/2/1 L_Data.ind, low priority hop count 5, tpdu 00 80
13:40:15.653 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 39 us
13:40:15.657 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: UART ready for sending after 46,537 us
13:40:15.657 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): sending cEMI frame seq 0, NonBlocking, attempt 1 (channel 0) 06 10 05 30 00 11 29 00 bc d0 11 04 32 01 01 00 80
13:40:15.659 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write UART services, waiting for .con
13:40:15.662 [TRACE  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): discard multicast loopback cEMI frame: 1.1.4->6/2/1 L_Data.ind, low priority hop count 5, tpdu 00 80
13:40:15.665 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending cEMI frame seq 4, WaitForAck, attempt 1 (channel 1) 06 10 04 20 00 15 04 01 04 00 29 00 bc d0 11 04 32 01 01 00 80
13:40:15.668 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 04 20 00 15 04 01 04 00 29 00 bc d0 11 04 32 01 01 00 80
13:40:15.704 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 04 21 00 0a 04 01 04 00
13:40:15.710 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: received service ack 4 from 192.168.31.101:5559 (channel 1)
13:40:15.712 [DEBUG  ] io.calimero.server.gateway.ReplayBuffer: KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2) successfully completed event '3,228,589,164,001/3,228,589,164,001'
13:40:15.713 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: write ACK (0x11) for 6/2/1
13:40:15.715 [TRACE  ] io.calimero.server.gateway.knx-server: dispatching to KNX subnets: exclude subnet /dev/ttyAMA0
13:40:15.716 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 5 bytes after 70 us
13:40:15.720 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 30,323 us
13:40:15.723 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 30,372 us, char 0x0, discard partial frame (length 6) bc 66 d3 32 01 d1
13:40:15.726 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 429 us
13:40:15.729 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 159 us
13:40:15.733 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: finished reading 1 bytes after 5,658 us
13:40:15.736 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 5,967 us
13:40:15.764 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: no ACK received after 82 ms
13:40:15.764 [WARNING] io.calimero.server.gateway.knx-server: timeout sending to 6/2/1: no ACK for L-Data.con
13:40:16.152 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:21292 on [any]
13:40:16.159 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:21292 on [any]
13:40:19.062 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 3,342,637 us
13:40:19.065 [DEBUG  ] io.calimero.serial.tpuart:/dev/ttyAMA0: reset receive buffer after 3,345,712 us, char 0x7, discard partial frame (length 2) 94 8b
13:40:19.068 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:19.070 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 3,138 us
13:40:19.931 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20030 on [any]
13:40:19.937 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20030 on [any]
13:40:22.209 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:20035 06 10 02 03 00 0e 08 01 00 00 00 00 00 00
13:40:22.217 [DEBUG  ] io.calimero.server.knx-server: responses use route-back control endpoint 192.168.31.101:20035
13:40:22.305 [INFO   ] io.calimero.server.knx-server: send KNXnet/IP description to 192.168.31.101:20035: "Calimero KNX", KNX address 6.6.0, KNX medium TP1, Installation 0 - Project 0 (ID 0), KNX IP multicast address 224.0.23.12, MAC address b8:27:eb:eb:0c:43, S/N 0000:00000000, Core (v2), Device Management (v2), Tunneling (v2), Routing (v2), 6.6.2, 6.6.3, 6.6.4, KNX manufacturer ID 0x0, data 0x626d323031312020
13:40:22.358 [INFO   ] io.calimero.server.knx-server: accepted /dev/ttyAMA0 tcp connection 192.168.31.101:22565
13:40:22.361 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:22565 06 10 02 05 00 1a 08 02 00 00 00 00 00 00 08 02 00 00 00 00 00 00 04 04 02 00
13:40:22.365 [DEBUG  ] io.calimero.server.knx-server: responses to client use route-back control endpoint 192.168.31.101:22565
13:40:22.367 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0: setup data endpoint (TCP, channel 2) for connection request from 192.168.31.101:22565
13:40:22.370 [DEBUG  ] io.calimero.server.knx-server: responses use route-back data endpoint 192.168.31.101:22565
13:40:22.373 [TRACE  ] io.calimero.server.knx-server: address 6.6.2 already assigned
13:40:22.376 [INFO   ] io.calimero.server.knx-server: assign additional individual address 6.6.3 to channel 2
13:40:22.378 [DEBUG  ] io.calimero.server.knx-server: created socket on 192.168.31.22:52752
13:40:22.382 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint KNX IP LinkLayer 192.168.31.101:22565 (TCP, channel 2, 6.6.3) is up and running
13:40:22.385 [DEBUG  ] io.calimero.server.gateway.knx-server: established connection KNX IP LinkLayer 192.168.31.101:22565 (TCP, channel 2, 6.6.3)
13:40:22.426 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:22565 06 10 04 24 00 0d 04 02 00 00 08 00 01
13:40:22.438 [DEBUG  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:22565: received tunneling-feat.set enable feature info service 01
13:40:22.442 [DEBUG  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:22565: respond with tunneling-feat.res enable feature info service 01
13:40:22.481 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:22565 06 10 02 07 00 10 02 00 08 02 00 00 00 00 00 00
13:40:22.483 [TRACE  ] io.calimero.server.knx-server: received connection-state request (channel 2) from 192.168.31.101:22565
13:40:22.517 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:22565 06 10 02 09 00 10 02 00 08 02 00 00 00 00 00 00
13:40:22.521 [DEBUG  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:22565: close connection for channel 2 - client request
13:40:22.525 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint 192.168.31.101:22565 closed
13:40:22.527 [DEBUG  ] io.calimero.server.gateway.knx-server: removed connection KNX IP LinkLayer 192.168.31.101:22565 (client request)
13:40:22.545 [INFO   ] io.calimero.server.knx-server: close tcp connection to 192.168.31.101:22565
13:40:22.813 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:32482 on [any]
13:40:22.820 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:32482 on [any]
13:40:23.684 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:32485 on [any]
13:40:23.691 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:32485 on [any]
13:40:24.092 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,026,862 us
13:40:24.095 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:24.098 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 289 us
13:40:27.453 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:27109 on [any]
13:40:27.460 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:27109 on [any]
13:40:29.122 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,633 us
13:40:29.124 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:29.127 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,776 us
13:40:29.301 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 05 00 1a 08 01 00 00 00 00 00 00 08 01 00 00 00 00 00 00 04 04 02 00
13:40:29.305 [DEBUG  ] io.calimero.server.knx-server: responses to client use route-back control endpoint 192.168.31.101:5559
13:40:29.308 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0: setup data endpoint (UDP NAT, channel 3) for connection request from 192.168.31.101:5559
13:40:29.310 [DEBUG  ] io.calimero.server.knx-server: responses use route-back data endpoint 192.168.31.101:5559
13:40:29.313 [TRACE  ] io.calimero.server.knx-server: address 6.6.2 already assigned
13:40:29.316 [INFO   ] io.calimero.server.knx-server: assign additional individual address 6.6.3 to channel 3
13:40:29.319 [DEBUG  ] io.calimero.server.knx-server: created socket on 192.168.31.22:48255
13:40:29.322 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 3, 6.6.3) is up and running
13:40:29.323 [DEBUG  ] io.calimero.server.gateway.knx-server: established connection KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 3, 6.6.3)
13:40:29.325 [DEBUG  ] io.calimero.server.gateway.ReplayBuffer: activate replay buffer for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 3, 6.6.3)
13:40:29.328 [INFO   ] io.calimero.server.gateway.ReplayBuffer: found exact match for Key[hostAddress=192.168.31.101, port=5559, timestamp=1713015629326] in disrupted connections: [KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2)]
13:40:29.332 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 07 00 10 03 00 08 01 00 00 00 00 00 00
13:40:29.334 [TRACE  ] io.calimero.server.knx-server: received connection-state request (channel 3) from 192.168.31.101:5559
13:40:31.227 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:45383 on [any]
13:40:31.234 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:45383 on [any]
13:40:34.152 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,027,166 us
13:40:34.153 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:34.155 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,099 us
13:40:34.981 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:34.988 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:36.254 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 05 00 1a 08 01 00 00 00 00 00 00 08 01 00 00 00 00 00 00 04 04 02 00
13:40:36.256 [DEBUG  ] io.calimero.server.knx-server: responses to client use route-back control endpoint 192.168.31.101:5559
13:40:36.258 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0: setup data endpoint (UDP NAT, channel 4) for connection request from 192.168.31.101:5559
13:40:36.260 [DEBUG  ] io.calimero.server.knx-server: responses use route-back data endpoint 192.168.31.101:5559
13:40:36.262 [TRACE  ] io.calimero.server.knx-server: address 6.6.2 already assigned
13:40:36.264 [TRACE  ] io.calimero.server.knx-server: address 6.6.3 already assigned
13:40:36.266 [INFO   ] io.calimero.server.knx-server: assign additional individual address 6.6.4 to channel 4
13:40:36.268 [DEBUG  ] io.calimero.server.knx-server: created socket on 192.168.31.22:46590
13:40:36.272 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 4, 6.6.4) is up and running
13:40:36.273 [DEBUG  ] io.calimero.server.gateway.knx-server: established connection KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 4, 6.6.4)
13:40:36.277 [DEBUG  ] io.calimero.server.gateway.ReplayBuffer: activate replay buffer for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 4, 6.6.4)
13:40:36.280 [INFO   ] io.calimero.server.gateway.ReplayBuffer: found exact match for Key[hostAddress=192.168.31.101, port=5559, timestamp=1713015636278] in disrupted connections: [KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2), KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 3, 6.6.3)]
13:40:36.293 [TRACE  ] io.calimero.server.knx-server: /dev/ttyAMA0 received 192.168.31.101:5559 06 10 02 07 00 10 04 00 08 01 00 00 00 00 00 00
13:40:36.296 [TRACE  ] io.calimero.server.knx-server: received connection-state request (channel 4) from 192.168.31.101:5559
13:40:38.750 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:38.760 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX' for container /dev/ttyAMA0 to 192.168.31.101:20029 on [any]
13:40:39.182 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,027,935 us
13:40:39.184 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:39.187 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 739 us
13:40:39.916 [INFO   ] io.calimero.server.gateway.knx-server: knx-server: user request for shutdown
13:40:39.954 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server discovery endpoint
13:40:39.956 [INFO   ] io.calimero.server.knx-server: knx-server discovery endpoint closed
13:40:39.959 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending disconnect request for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 1, 6.6.2)
13:40:39.961 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 02 09 00 10 01 00 08 01 00 00 00 00 00 00
13:40:44.212 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,146 us
13:40:44.214 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:44.217 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 300 us
13:40:49.242 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,669 us
13:40:49.244 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:49.247 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 298 us
13:40:49.964 [INFO   ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: close connection for channel 1 - quit service container /dev/ttyAMA0
13:40:49.966 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint 192.168.31.101:5559 closed
13:40:49.966 [DEBUG  ] io.calimero.server.gateway.knx-server: removed connection KNX IP LinkLayer 192.168.31.101:5559 (quit service container /dev/ttyAMA0)
13:40:49.971 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending disconnect request for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 3, 6.6.3)
13:40:49.973 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 02 09 00 10 03 00 08 01 00 00 00 00 00 00
13:40:54.272 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,661 us
13:40:54.274 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:54.277 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 280 us
13:40:59.302 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,726 us
13:40:59.304 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:40:59.306 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 325 us
13:40:59.975 [INFO   ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: close connection for channel 3 - quit service container /dev/ttyAMA0
13:40:59.977 [DEBUG  ] io.calimero.server.gateway.knx-server: removed connection KNX IP LinkLayer 192.168.31.101:5559 (quit service container /dev/ttyAMA0)
13:40:59.977 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint 192.168.31.101:5559 closed
13:40:59.979 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: sending disconnect request for KNX IP LinkLayer 192.168.31.101:5559 (UDP NAT, channel 4, 6.6.4)
13:40:59.981 [TRACE  ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: send 192.168.31.22:3671->192.168.31.101:5559 06 10 02 09 00 10 04 00 08 01 00 00 00 00 00 00
13:41:04.332 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,608 us
13:41:04.334 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:41:04.337 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 357 us
13:41:09.362 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: receiver woke from extended idle period of 5,029,552 us
13:41:09.364 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: TP-UART status: Temp. OK
13:41:09.367 [TRACE  ] io.calimero.serial.tpuart:/dev/ttyAMA0: loop time = 2,419 us
13:41:09.984 [INFO   ] io.calimero.server.knxnetip.KNX IP LinkLayer 192.168.31.101:5559: close connection for channel 4 - quit service container /dev/ttyAMA0
13:41:09.985 [INFO   ] io.calimero.server.knx-server: /dev/ttyAMA0 data endpoint 192.168.31.101:5559 closed
13:41:09.985 [DEBUG  ] io.calimero.server.gateway.knx-server: removed connection KNX IP LinkLayer 192.168.31.101:5559 (quit service container /dev/ttyAMA0)
13:41:09.988 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server control endpoint /dev/ttyAMA0
13:41:09.988 [DEBUG  ] io.calimero.server.knxnetip.KNX IP routing service (eth0 224.0.23.12): close connection - user request
13:41:09.989 [INFO   ] io.calimero.server.knx-server: knx-server control endpoint /dev/ttyAMA0 closed
13:41:09.991 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server routing service 224.0.23.12
13:41:09.991 [DEBUG  ] io.calimero.server.gateway.knx-server: removed connection KNX IP routing service (eth0 224.0.23.12) (user request)
13:41:09.994 [INFO   ] io.calimero.server.knx-server: knx-server routing service 224.0.23.12 closed
13:41:09.999 [DEBUG  ] io.calimero.device.knx-server: saving device memory to file:///usr/app/knx-server-ios.xml
13:41:10.071 [DEBUG  ] io.calimero.device.knx-server: saving interface object server to file:///usr/app/knx-server-ios.xml
13:41:10.086 [TRACE  ] io.calimero.xml.XmlOutputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamWriter

Even longer run: logs_uart.log

unknown service type 0x205 - ignored

Greetings!

I am using calimero-server on a Windows box, to tunnel an USB KNX connection for an OpenHAB3 server. (As OpenHAB KNX binding unfortunately does not have an USB implementation). Both calimero-server and the OpenHAB3 is on the same Windows box, using a loopback interface to communicate. Due to some reason the calimero-server does not accept the 0x205 CONNECTION_REQUEST KNX/IP service type, which is sent by the OpenHAB binding (which is based on calimero as well). ETS5 discovery and connection works perfectly. Is this working as intended? Or is there some kind of problem with the KNX/IP protocol used between the binding and claimero-server?

My server-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<knxServer name="knx-server" friendlyName="Calimero KNX IP Server">
	<discovery listenNetIf="all" outgoingNetIf="all" activate="true" />

	<serviceContainer reuseCtrlEP="false" activate="true" routing="false" networkMonitoring="true" udpPort="3671" listenNetIf="any">
		<knxAddress type="individual">1.1.80</knxAddress>
		<knxSubnet type="usb" medium="tp1">USB Interface (MDRC)</knxSubnet>
	</serviceContainer>

</knxServer>

The log of the calimero-server:

[main] INFO calimero.device.knx-server - could not open file:///c:/Adat/test/bin/knx-server-ios.xml, create resource on closing device (c:\Adat\test\bin\knx-server-ios.xml (A rendszer nem találja a megadott fájlt))
[main] INFO calimero.server.knx-server - Calimero KNX IP Server v2.5-dev
[main] INFO calimero.server.knx-server - knx-server 'Calimero KNX IP Server' - 1 service container, discovery: listen on [all] send on [all]
[main] INFO calimero.server.knx-server - USB Interface (MDRC):
        listen on any (port 3671), KNX IP routing disabled
        usb USB Interface (MDRC) connection: TP1 medium, device 1.1.80
[main] INFO calimero.server.knx-server - setup usb subnet 'USB Interface (MDRC)'
type 'stop' to stop the gateway and shutdown the server
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net0
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth0
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth1
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net1
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface ppp0
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net2
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth3
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net3
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth4
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net4
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net5
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface net6
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth5
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth6
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth7
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth8
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth9
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth10
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth11
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth12
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth13
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth14
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth15
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth16
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth17
[knx-server discovery endpoint] WARN calimero.server.knx-server - KNXnet/IP discovery join fails with no IP address bound to interface eth18
[knx-server discovery endpoint] INFO calimero.server.knx-server - KNXnet/IP discovery listens on interfaces [lo, eth2]
[knx-server discovery endpoint] INFO calimero.server.knx-server - knx-server discovery endpoint is up and running
[knx-server control endpoint USB Interface (MDRC)] INFO calimero.server.knx-server - control endpoint 'USB Interface (MDRC)' secure mgmt/tunneling connections: optional/optional
[knx-server tcp service USB Interface (MDRC)] INFO calimero.server.knx-server - knx-server tcp service USB Interface (MDRC) is up and running
[knx-server control endpoint USB Interface (MDRC)] INFO calimero.server.knx-server - knx-server control endpoint USB Interface (MDRC) is up and running
[knx-server] INFO calimero.usb - Found 1 KNX USB devices:
 |--Bus 001 Device 004: ID 147b:5120
[knx-server] INFO calimero.usb.USB Interface (MDRC) - Bus 001 Device 004: ID 147b:5120
[knx-server] INFO calimero.link.USB Interface (MDRC) - Device Descriptor (Mask Version) 0012 - System 1 (BCU 1)
[knx-server] INFO calimero.link.USB Interface (MDRC) - PEI type 1
enforce transmission interframe spacing, wait 14 ms
enforce transmission interframe spacing, wait 14 ms
enforce transmission interframe spacing, wait 9 ms
enforce transmission interframe spacing, wait 30 ms
enforce transmission interframe spacing, wait 14 ms
enforce transmission interframe spacing, wait 30 ms
[knx-server] INFO calimero.link.USB Interface (MDRC) - KNX individual address 1.1.255
[knx-server discovery endpoint] INFO calimero.server.knx-server - received packet from /127.0.0.1:58893 with unknown service type 0x205 - ignored

no property ID 82 in Device Object, wrong communication medium setting, and unknown service type 0x203

I am running the armv7 2.6 snapshot inside Docker on a Raspberry Pi. I have an Albrecht Jung KNX Funk-USB Stick plugged into the device. I am running ETS6 on a (virtualised) Windows machine elsewhere in the same network.

server-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<knxServer name="knx-server" friendlyName="Calimero KNX IP Server">
  <discovery listenNetIf="all" outgoingNetIf="all" activate="true" />

  <serviceContainer activate="true" routing="true" networkMonitoring="true" udpPort="3671" listenNetIf="any" reuseCtrlEP="false">
    <knxAddress type="individual">1.1.0</knxAddress>
    <knxSubnet type="ip" useNat="true">192.168.188.64:3671</knxSubnet>
    <routing/>
    <!-- latencyTolerance specifies the time window for accepting secure multicasts, 
      depends on max. end-to-end network latency (usually [500 .. 8000] ms) -->
    <!-- <routing latencyTolerance="1000">224.0.23.12</routing> -->

    <!-- Enabling the disruption buffer will replay missed frames after reconnecting a KNXnet/IP client link 
      using the specific client UDP port range (if caused by a disrupted connection). -->
    <!-- <disruptionBuffer expirationTimeout="30" udpPort="5555-5559" /> -->

    <!-- Specify one KNX subnet type, connecting the KNX network. The subnet connection type is one of 
      { "ip", "tcp", "knxip", "ft12", "usb", "tpuart", "user-supplied", "virtual", "emulate" }. 
      The KNX communication medium is one of { "tp1" (default), "pl110", "knxip", "rf" }. 
      In the follwing are some examples: -->

    <!-- <knxSubnet type="ip">192.168.10.10:3671</knxSubnet> -->
    <!-- two optional attributes are supported for tunneling: 
      * netif: specifies the server network interface to the knx subnet
      * useNat="true"|"false": use network address translation (NAT) -->
    <!-- <knxSubnet type="ip" netif="eth0" useNat="true">192.168.10.10:3671</knxSubnet> -->

    <knxSubnet type="usb" medium="rf" knxAddress="1.1.0">Jung</knxSubnet>
    <!-- <knxSubnet type="usb" medium="rf" knxAddress="1.1.0" domainAddress="00FA"></knxSubnet> -->
    <!-- domainAddress="00FA:94133492" -->

    <!-- Additional KNX individual addresses assigned to client KNXnet/IP connections (optional) -->
    <!--
    <additionalAddresses>
      <knxAddress type="individual">1.1.10</knxAddress>
      <knxAddress type="individual">1.1.11</knxAddress>
      <knxAddress type="individual">1.1.12</knxAddress>
      <knxAddress type="individual">1.1.13</knxAddress>
    </additionalAddresses>
    -->
  </serviceContainer>
</knxServer>

Docker command:

$> docker run --rm -ti --net host -v /mnt/Blue/docker/calimero/server-config.xml:/usr/app/server-config.xml --privileged -v /dev/bus/usb:/dev/bus/usb calimeroproject/knxserver:latest-armv7 server-config.xml 

Output:

[main] INFO calimero.server.knx-server - Calimero KNX IP Server v2.6-SNAPSHOT
[main] INFO calimero.server.knx-server - knx-server 'Calimero KNX IP Server' - 1 service container, discovery: listen on [all] send on [all]
[main] INFO calimero.server.knx-server - Jung:
	listen on any (port 3671), KNX IP routing multicast group 224.0.23.12
	usb Jung connection: RF medium, device 1.1.0 domain 0x000000000000 s/n 0000:00000000
[main] WARN calimero.device.knx-server - reading DoA
tuwien.auto.calimero.device.ios.KnxPropertyException: no property ID 82 in Device Object (index 0), void DP (read/write access to nonexistent property)
	at tuwien.auto.calimero.device.ios.InterfaceObject.getProperty(InterfaceObject.java:277)
	at tuwien.auto.calimero.device.ios.DeviceObject.get(DeviceObject.java:98)
	at tuwien.auto.calimero.device.ios.DeviceObject.domainAddress(DeviceObject.java:89)
	at tuwien.auto.calimero.device.KnxDeviceServiceLogic.domainAddress(KnxDeviceServiceLogic.java:786)
	at tuwien.auto.calimero.device.KnxDeviceServiceLogic.setDevice(KnxDeviceServiceLogic.java:147)
	at tuwien.auto.calimero.device.BaseKnxDevice.setDeviceLink(BaseKnxDevice.java:363)
	at tuwien.auto.calimero.server.gateway.KnxServerGateway.<init>(KnxServerGateway.java:758)
	at tuwien.auto.calimero.server.Launcher.run(Launcher.java:610)
	at tuwien.auto.calimero.server.Launcher.main(Launcher.java:583)
type 'stop' to stop the gateway and shutdown the server
[knx-server discovery endpoint] INFO calimero.server.knx-server - knx-server discovery endpoint [veth7838cbf, vethae96a8f, vetha7c78bd, vethd1ac9d3, br-f520d88a05d3, docker0, eth0, lo] is up and running
[knx-server routing service 224.0.23.12] INFO calimero.knxnetip.KNXnet/IP Routing 224.0.23.12:3671 - multicast loopback mode enabled
[knx-server control endpoint Jung] INFO calimero.server.knx-server - Jung secure mgmt/tunneling connections: optional/optional
[knx-server routing service 224.0.23.12] INFO calimero.server.knx-server - knx-server Jung KNX IP routing service 224.0.23.12 is up and running
[knx-server Jung tcp service] INFO calimero.server.knx-server - knx-server Jung tcp service (veth7838cbf 169.254.10.51:3671) is up and running
[knx-server control endpoint Jung] INFO calimero.server.knx-server - knx-server Jung control endpoint (veth7838cbf 169.254.10.51:3671) is up and running
[knx-server] INFO calimero.usb - Found 1 KNX USB devices:
 |--Bus 001 Device 012: ID 135e:0123
 |   Albrecht Jung KNX Funk-USB Stick (Albrecht Jung)
 |   S/N 0072FB0021DD
[knx-server] INFO calimero.usb.Jung - Bus 001 Device 012: ID 135e:0123
Albrecht Jung KNX Funk-USB Stick (Albrecht Jung)
S/N 0072FB0021DD
[knx-server] INFO calimero.link.Jung - Device Descriptor (Mask Version) 2311 - RF USB interface v2
[knx-server] WARN calimero.link.Jung - wrong communication medium setting: using TP1 to access RF medium

That no property ID 82 in Device Object looks like a warning rather than an error, so perhaps it can be ignored. That wrong communication medium setting is also a warning. Not sure why that appears, since the server config does not mention TP anywhere.

When I try to set up an IP Tunneling connection from ETS6, I get the following output in Docker:

[knx-server discovery endpoint] INFO calimero.server.knx-server - received packet from /192.168.188.33:37142 with unknown service type 0x203 - ignored
[knx-server discovery endpoint] INFO calimero.server.knx-server - received packet from /192.168.188.33:43605 with unknown service type 0x203 - ignored

And ETS complains that it Failed to read device description from 192.168.188.64:3671, but Ping succeeded.

I have also tried to activate reuseCtrlEP like so:

  <serviceContainer activate="true" routing="false" networkMonitoring="true" udpPort="3671" listenNetIf="any" reuseCtrlEP="true">

The output is the same as above. Unknown service type 0x203 ignored.

What am I doing wrong?

No reconnect when KNX bus is interrupted

With your fixes from #9 the server runs flawlessly with the kBerry. But I noticed when there is a KNX bus interruption the server does not resume the connection but throws the following exceptions:

[knx-server discovery endpoint] DEBUG calimero.server.knx-server - KNXnet/IP discovery: identify as 'Hass OS KNXnet/IP Server' for container /dev/ttyAMA0 to 192.168.178.29:50299 on [any]
[Calimero FT1.2 receiver] TRACE calimero.serial.ft12:/dev/ttyAMA0 - received reset
[Calimero FT1.2 receiver] WARN calimero.serial.ft12:/dev/ttyAMA0 - toggle frame count bit
[Calimero FT1.2 receiver] WARN calimero.link./dev/ttyAMA0 - received unspecified frame f0 c2 00 0a 00 01 00 0a 01 00
java.lang.NullPointerException
	at tuwien.auto.calimero.link.AbstractLink.dispatchCustomEvent(AbstractLink.java:676)
	at tuwien.auto.calimero.link.AbstractLink$LinkNotifier.frameReceived(AbstractLink.java:162)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.lambda$fireFrameReceived$0(FT12Connection.java:791)
	at tuwien.auto.calimero.internal.EventListeners.fire(EventListeners.java:126)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.fireFrameReceived(FT12Connection.java:791)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.readFrame(FT12Connection.java:709)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.run(FT12Connection.java:627)
[Calimero FT1.2 receiver] WARN calimero.link./dev/ttyAMA0 - received unspecified frame f0 c2 00 0a 00 01 00 0a 01 01
java.lang.NullPointerException
	at tuwien.auto.calimero.link.AbstractLink.dispatchCustomEvent(AbstractLink.java:676)
	at tuwien.auto.calimero.link.AbstractLink$LinkNotifier.frameReceived(AbstractLink.java:162)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.lambda$fireFrameReceived$0(FT12Connection.java:791)
	at tuwien.auto.calimero.internal.EventListeners.fire(EventListeners.java:126)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.fireFrameReceived(FT12Connection.java:791)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.readFrame(FT12Connection.java:709)
	at tuwien.auto.calimero.serial.FT12Connection$Receiver.run(FT12Connection.java:627)
[knx-server /dev/ttyAMA0 tcp connection /192.168.178.29:51241] TRACE calimero.server.knx-server - received connection state request from /192.168.178.29:51241 for channel 103
[knx-server /dev/ttyAMA0 tcp connection /192.168.178.29:51241] DEBUG calimero.server.knxnetip.KNX IP LinkLayer 192.168.178.29:51241 - close connection for channel 103 - client request
[knx-server /dev/ttyAMA0 tcp connection /192.168.178.29:51241] DEBUG calimero.server.gateway.knx-server - removed connection KNX IP LinkLayer 192.168.178.29:51241 (client request)
[/dev/ttyAMA0 data endpoint 192.168.178.29:51241] INFO calimero.server.knx-server - /dev/ttyAMA0 data endpoint 192.168.178.29:51241 closed
[knx-server /dev/ttyAMA0 tcp connection /192.168.178.29:51241] INFO calimero.server.knx-server - close tcp connection to /192.168.178.29:51241 (no active secure session or client connection)
[knx-server /dev/ttyAMA0 tcp connection /192.168.178.29:51241] INFO calimero.server.knx-server - close tcp connection to /192.168.178.29:51241

Errors like "invalid operation mode 0x0", "address byte array too short" and "verify write failed for address"

I am trying to use Calimero docker image with Raspberry Pi 3 Model B Rev 1.2 to connect KNX-USB Data Interface (GIRA 1080 00) via onboard USB port.

I've installed Docker and followed https://hub.docker.com/r/calimeroproject/knxserver

Here is my config (with stripped comments from the default sample):

<?xml version="1.0" encoding="UTF-8"?>
<knxServer name="knx-server" friendlyName="Calimero KNX IP Server">
	<discovery listenNetIf="eth0" outgoingNetIf="eth0" activate="true" />
	<serviceContainer activate="true" routing="false" networkMonitoring="true"
		udpPort="3671" listenNetIf="eth0">
		<knxAddress type="individual">7.5.0</knxAddress>
		<routing latencyTolerance="1000">224.0.23.12</routing>
		<disruptionBuffer expirationTimeout="30" udpPort="5555-5559" />
		<knxSubnet type="usb" medium="tp1"></knxSubnet>
		<groupAddressFilter>
		</groupAddressFilter>
		<additionalAddresses>
			<knxAddress type="individual">7.5.10</knxAddress>
			<knxAddress type="individual">7.5.11</knxAddress>
			<knxAddress type="individual">7.5.12</knxAddress>
			<knxAddress type="individual">7.5.13</knxAddress>
		 </additionalAddresses>
	</serviceContainer>
</knxServer>

The docker container starts and successfully detects USB-KNX device, but then randomly throws errors like:

  • io.calimero.KNXIllegalArgumentException: invalid operation mode 0x0
  • io.calimero.KNXIllegalArgumentException: address byte array too short
    Sometimes preceded with one or more lines like:
  • io.calimero.link.135e:0022: verify write failed for address 60: 12 vs 09

Server is closed but apparently does not exit automatically after this (which is bad, how do I suppose to automate its restart after such state?)
Running again on the same might give a different error message. As if there were some problems with USB connection itself?

I tried to run in different modes by changing the XML config (but random errors were greatly misguiding me until I started to repeat my attempts several times after each change), but generally the device is not working.

For me it worked only 3 times (from roughly 30 or more my attempts), randomly: one shortly after Raspberry PI boot; one after power cycling USB ports (as I started to do it constantly) with sudo uhubctl -l 1-1 -p 2 -a 0 and sudo uhubctl -l 1-1 -p 2 -a 1, and one just between various unsuccessful attempts without any changes in config or anything.

When the device was behaving, I was able to try ETS connect (and it showed "OK" for Test button after I clicked on a newly appeared IP-Tunnel device there), and also checked routing mode between TP and IP (fortunately was enabled in my config at that attempt) – it was working, at least routing some telegrams.

I suspected low USB power, so I've added a 12 V powered USB hub between Raspberry and Gira – no changes. Also I replaced the power source of Raspberry itself – again, nothing changed.

When I use this Gira KNX USB interface with Windows PC for ETS – it works flawlessly.
What could be the reason why Calimero fails? It this somehow related to hardware?

Here are full logs captured after Raspberry reboot (already with a USB hub) – two consecutive attempts that gave different error messages:

alpi@rpi3:~ $ sudo chmod 666 /var/run/docker.sock
alpi@rpi3:~ $ docker run --name my_knx --rm --tty --interactive --net host --privileged --volume /srv/my/dock/server-config.xml:/usr/app/server-config.xml  calimeroproject/knxserver -vvv server-config.xml
WARNING: Unknown module: io.calimero.serial.provider.rxtx specified to --add-reads
13:48:09.295 [TRACE  ] io.calimero.xml.XmlResolver: resolve server-config.xml
13:48:09.304 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:48:15.174 [TRACE  ] io.calimero.xml.XmlResolver: resolve jar:file:///usr/app/calimero-server-3.0-SNAPSHOT/lib/calimero-core-3.0-SNAPSHOT.jar!/properties.xml
13:48:15.217 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:48:15.449 [DEBUG  ] io.calimero.device.knx-server: loading interface object server from file:///usr/app/knx-server-ios.xml
13:48:15.458 [TRACE  ] io.calimero.xml.XmlResolver: resolve file:///usr/app/knx-server-ios.xml
13:48:15.464 [DEBUG  ] io.calimero.device.knx-server: no interface object server resource, create resource on closing device: /usr/app/knx-server-ios.xml (No such file or directory)
13:48:15.890 [INFO   ] io.calimero.server.knx-server: Calimero KNX IP server v3.0-SNAPSHOT
13:48:16.150 [INFO   ] io.calimero.server.knx-server: use configuration 'Calimero KNX IP Server' with 1 service container, discovery: listen on [eth0] send on [eth0] interfaces
service container usb-7.5.0:
	listen on eth0 (port 3671), KNX IP routing disabled
	usb connection: TP1 medium, device 7.5.0
13:48:16.220 [DEBUG  ] io.calimero.server.knx-server: setup usb subnet 'usb-7.5.0'
13:48:16.303 [INFO   ] io.calimero.server.gateway.knx-server: activate 'usb-7.5.0' disruption buffer on ports [5,555-5,559], disruption timeout 30 s
13:48:16.323 [TRACE  ] io.calimero.device.knx-server: sync Addresstable Object from address 0x116
13:48:16.326 [TRACE  ] io.calimero.device.knx-server: sync Associationtable Object from address 0x1000
13:48:16.329 [TRACE  ] io.calimero.device.knx-server: sync Group Object Table Object from address 0x3000
type 'stop' to stop the gateway and shutdown the server
13:48:16.746 [TRACE  ] io.calimero.server.knx-server: network stack uses IPv4 addresses: unknown
13:48:16.852 [TRACE  ] io.calimero.serial.ConnectionFactory: instantiate service provider io.calimero.usb.provider.javax.UsbConnectionProvider
13:48:16.858 [TRACE  ] io.calimero.server.knx-server: found network interfaces eth0 [192.168.31.22]
13:48:16.866 [INFO   ] io.calimero.server.knx-server: knx-server discovery endpoint [eth0] is up and running
13:48:16.947 [TRACE  ] io.calimero.server.knx-server: usb-7.5.0 control endpoint bound to 192.168.31.22:3671
13:48:17.087 [INFO   ] io.calimero.server.knx-server: usb-7.5.0 secure mgmt/tunneling connections: optional/optional
13:48:17.232 [INFO   ] io.calimero.server.knx-server: knx-server usb-7.5.0 tcp service (eth0 192.168.31.22:3671) is up and running
13:48:17.239 [INFO   ] io.calimero.server.knx-server: knx-server usb-7.5.0 control endpoint (eth0 192.168.31.22:3671) is up and running
13:48:17.378 [DEBUG  ] io.calimero.usb.provider.javax: Enumerate USB devices
usb4java root hub 1.0.0
 |--Bus 001 Device 001: ID 1d6b:0002
     DWC OTG Controller (Linux 6.1.21-v7+ dwc_otg_hcd)
     S/N 3f980000.usb
      |--Bus 001 Device 002: ID 0424:9514
           |--Bus 001 Device 003: ID 0424:ec00
           |--Bus 001 Device 004: ID 0409:005a
                |--Bus 001 Device 005: ID 135e:0022
                    KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:48:17.525 [TRACE  ] io.calimero.usb.provider.javax: Enumerate USB devices using the low-level API
Bus 1 Device 3: ID 0424:ec00
    Parent Hub 1:2, attached at port 1 (/bus:1/1/1)
    High Speed USB
Bus 1 Device 5: ID 135e:0022
    KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
    Parent Hub 1:4, attached at port 1 (/bus:1/1/3/1)
    Full Speed USB
Bus 1 Device 4: ID 0409:005a
    Parent Hub 1:2, attached at port 3 (/bus:1/1/3)
    High Speed USB
Bus 1 Device 2: ID 0424:9514
    Parent Hub 1:1, attached at port 1 (/bus:1/1)
    High Speed USB
Bus 1 Device 1: ID 1d6b:0002
    DWC OTG Controller (Linux 6.1.21-v7+ dwc_otg_hcd)
    High Speed USB
13:48:17.555 [INFO   ] io.calimero.usb.provider.javax: Found 1 KNX USB devices:
 |--Bus 001 Device 005: ID 135e:0022
 |   KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:48:17.648 [INFO   ] io.calimero.usb.provider.javax.135e:0022: Bus 001 Device 005: ID 135e:0022
KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:48:17.653 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: USB interface 00, setting 0
13:48:17.658 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 2 OUT
13:48:17.662 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN
13:48:17.666 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: Found USB device endpoint addresses OUT 0x2, IN 0x81
13:48:17.719 [ERROR  ] io.calimero.usb.provider.javax.135e:0022: creating HID class report from 00000000000000000000024dff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
io.calimero.KNXFormatException: not a KNX USB report (wrong report ID 0)
	at [email protected]/io.calimero.usb.provider.javax.HidReportHeader.from(HidReportHeader.java:81)
	at [email protected]/io.calimero.usb.provider.javax.HidReport.<init>(HidReport.java:211)
	at [email protected]/io.calimero.usb.provider.javax.UsbConnection$UsbCallback.dataEventOccurred(UsbConnection.java:237)
	at org.usb4java.javax.PipeListenerList.dataEventOccurred(PipeListenerList.java:49)
	at org.usb4java.javax.Pipe.sendEvent(Pipe.java:270)
	at org.usb4java.javax.IrpQueue.finishIrp(IrpQueue.java:48)
	at org.usb4java.javax.AbstractIrpQueue.process(AbstractIrpQueue.java:118)
	at org.usb4java.javax.AbstractIrpQueue$1.run(AbstractIrpQueue.java:73)
	at java.base/java.lang.Thread.run(Unknown Source)

13:48:17.735 [DEBUG  ] io.calimero.serial.ConnectionFactory: serial port setup: Bus 001 Device 005: ID 135e:0022 USB interface 00
13:48:17.729 [ERROR  ] io.calimero.usb.provider.javax.135e:0022: creating HID class report from 00000000000000000000024dff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
io.calimero.KNXFormatException: not a KNX USB report (wrong report ID 0)
	at [email protected]/io.calimero.usb.provider.javax.HidReportHeader.from(HidReportHeader.java:81)
	at [email protected]/io.calimero.usb.provider.javax.HidReport.<init>(HidReport.java:211)
	at [email protected]/io.calimero.usb.provider.javax.UsbConnection$UsbCallback.dataEventOccurred(UsbConnection.java:237)
	at org.usb4java.javax.PipeListenerList.dataEventOccurred(PipeListenerList.java:49)
	at org.usb4java.javax.Pipe.sendEvent(Pipe.java:270)
	at org.usb4java.javax.IrpQueue.finishIrp(IrpQueue.java:48)
	at org.usb4java.javax.AbstractIrpQueue.process(AbstractIrpQueue.java:118)
	at org.usb4java.javax.AbstractIrpQueue$1.run(AbstractIrpQueue.java:73)
	at java.base/java.lang.Thread.run(Unknown Source)

13:48:17.770 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000003
13:48:17.790 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130a000800020f0200000301
13:48:17.798 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000001
13:48:17.815 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130b000800030f020000010001
13:48:17.820 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130a000800020f0300000501
13:48:17.830 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000005
13:48:17.842 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130a000800020f0200000501
13:48:17.848 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000002
13:48:17.860 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130b000800030f020000020012
13:48:17.868 [DEBUG  ] io.calimero.link.135e:0022: KNX device descriptor 0 (Mask Version): 0012 - System 1 (BCU 1)
13:48:18.156 [TRACE  ] io.calimero.event: registered void io.calimero.link.KNXNetworkLinkUsb$1.connectionStatus(io.calimero.serial.ConnectionStatus)
13:48:18.175 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010109
13:48:18.187 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01010901
13:48:18.191 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01010901
13:48:18.198 [INFO   ] io.calimero.link.135e:0022: PEI type 1
13:48:18.203 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 1 ms
13:48:18.207 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010116
13:48:18.256 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01011600
13:48:18.259 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01011600
13:48:18.263 [DEBUG  ] io.calimero.link.135e:0022: Address Table location 00
13:48:18.266 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010060
13:48:18.267 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX IP Server' for container usb-7.5.0 to 192.168.29.202:20046 on [any]
13:48:18.279 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b0100601e
13:48:18.281 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b0100601e
13:48:18.285 [ERROR  ] io.calimero.server.gateway.knx-server: error opening network link for usb-7.5.0
io.calimero.KNXIllegalArgumentException: invalid operation mode 0x0
	at io.calimero.core/io.calimero.link.BcuSwitcher$OperationMode.of(BcuSwitcher.java:108)
	at io.calimero.core/io.calimero.link.BcuSwitcher.enter(BcuSwitcher.java:156)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.linkLayerMode(KNXNetworkLinkUsb.java:230)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.<init>(KNXNetworkLinkUsb.java:156)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.<init>(KNXNetworkLinkUsb.java:115)
	at [email protected]/io.calimero.server.gateway.SubnetConnector.lambda$openNetworkLink$9(SubnetConnector.java:334)
	at io.calimero.core/io.calimero.link.Connector$Link.connect(Connector.java:417)
	at io.calimero.core/io.calimero.link.Connector$Link.<init>(Connector.java:195)
	at io.calimero.core/io.calimero.link.Connector.newLink(Connector.java:151)
	at [email protected]/io.calimero.server.gateway.SubnetConnector.openNetworkLink(SubnetConnector.java:380)
	at [email protected]/io.calimero.server.gateway.KnxServerGateway.run(KnxServerGateway.java:730)
	at java.base/java.lang.Thread.run(Unknown Source)

13:48:18.286 [DEBUG  ] io.calimero.server.knx-server: KNXnet/IP discovery: identify as 'Calimero KNX IP Server' for container usb-7.5.0 to 192.168.29.202:20046 on [any]
13:48:18.298 [INFO   ] io.calimero.server.gateway.knx-server: knx-server: user request for shutdown
13:48:18.333 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server discovery endpoint
13:48:18.344 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server control endpoint usb-7.5.0
13:48:18.348 [INFO   ] io.calimero.server.knx-server: knx-server discovery endpoint closed
13:48:18.349 [DEBUG  ] io.calimero.device.knx-server: saving device memory to file:///usr/app/knx-server-ios.xml
13:48:18.349 [INFO   ] io.calimero.server.knx-server: knx-server control endpoint usb-7.5.0 closed
13:48:18.421 [DEBUG  ] io.calimero.device.knx-server: saving interface object server to file:///usr/app/knx-server-ios.xml
13:48:18.434 [TRACE  ] io.calimero.xml.XmlOutputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamWriter
stop
request to stop server
alpi@rpi3:~ $ docker run --name my_knx --rm --tty --interactive --net host --privileged --volume /srv/my/dock/server-config.xml:/usr/app/server-config.xml  calimeroproject/knxserver -vvv server-config.xml
WARNING: Unknown module: io.calimero.serial.provider.rxtx specified to --add-reads
13:49:06.395 [TRACE  ] io.calimero.xml.XmlResolver: resolve server-config.xml
13:49:06.403 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:49:07.393 [TRACE  ] io.calimero.xml.XmlResolver: resolve jar:file:///usr/app/calimero-server-3.0-SNAPSHOT/lib/calimero-core-3.0-SNAPSHOT.jar!/properties.xml
13:49:07.415 [TRACE  ] io.calimero.xml.XmlInputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
13:49:07.653 [DEBUG  ] io.calimero.device.knx-server: loading interface object server from file:///usr/app/knx-server-ios.xml
13:49:07.661 [TRACE  ] io.calimero.xml.XmlResolver: resolve file:///usr/app/knx-server-ios.xml
13:49:07.666 [DEBUG  ] io.calimero.device.knx-server: no interface object server resource, create resource on closing device: /usr/app/knx-server-ios.xml (No such file or directory)
13:49:07.779 [INFO   ] io.calimero.server.knx-server: Calimero KNX IP server v3.0-SNAPSHOT
13:49:08.022 [INFO   ] io.calimero.server.knx-server: use configuration 'Calimero KNX IP Server' with 1 service container, discovery: listen on [eth0] send on [eth0] interfaces
service container usb-7.5.0:
	listen on eth0 (port 3671), KNX IP routing disabled
	usb connection: TP1 medium, device 7.5.0
13:49:08.088 [DEBUG  ] io.calimero.server.knx-server: setup usb subnet 'usb-7.5.0'
13:49:08.172 [INFO   ] io.calimero.server.gateway.knx-server: activate 'usb-7.5.0' disruption buffer on ports [5,555-5,559], disruption timeout 30 s
13:49:08.192 [TRACE  ] io.calimero.device.knx-server: sync Addresstable Object from address 0x116
13:49:08.196 [TRACE  ] io.calimero.device.knx-server: sync Associationtable Object from address 0x1000
13:49:08.199 [TRACE  ] io.calimero.device.knx-server: sync Group Object Table Object from address 0x3000
type 'stop' to stop the gateway and shutdown the server
13:49:08.480 [TRACE  ] io.calimero.server.knx-server: network stack uses IPv4 addresses: unknown
13:49:08.574 [TRACE  ] io.calimero.serial.ConnectionFactory: instantiate service provider io.calimero.usb.provider.javax.UsbConnectionProvider
13:49:08.595 [TRACE  ] io.calimero.server.knx-server: found network interfaces eth0 [192.168.31.22]
13:49:08.601 [INFO   ] io.calimero.server.knx-server: knx-server discovery endpoint [eth0] is up and running
13:49:08.689 [TRACE  ] io.calimero.server.knx-server: usb-7.5.0 control endpoint bound to 192.168.31.22:3671
13:49:08.808 [INFO   ] io.calimero.server.knx-server: usb-7.5.0 secure mgmt/tunneling connections: optional/optional
13:49:08.937 [INFO   ] io.calimero.server.knx-server: knx-server usb-7.5.0 control endpoint (eth0 192.168.31.22:3671) is up and running
13:49:08.942 [INFO   ] io.calimero.server.knx-server: knx-server usb-7.5.0 tcp service (eth0 192.168.31.22:3671) is up and running
13:49:09.111 [DEBUG  ] io.calimero.usb.provider.javax: Enumerate USB devices
usb4java root hub 1.0.0
 |--Bus 001 Device 001: ID 1d6b:0002
     DWC OTG Controller (Linux 6.1.21-v7+ dwc_otg_hcd)
     S/N 3f980000.usb
      |--Bus 001 Device 002: ID 0424:9514
           |--Bus 001 Device 003: ID 0424:ec00
           |--Bus 001 Device 004: ID 0409:005a
                |--Bus 001 Device 005: ID 135e:0022
                    KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:49:09.255 [TRACE  ] io.calimero.usb.provider.javax: Enumerate USB devices using the low-level API
Bus 1 Device 3: ID 0424:ec00
    Parent Hub 1:2, attached at port 1 (/bus:1/1/1)
    High Speed USB
Bus 1 Device 5: ID 135e:0022
    KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
    Parent Hub 1:4, attached at port 1 (/bus:1/1/3/1)
    Full Speed USB
Bus 1 Device 4: ID 0409:005a
    Parent Hub 1:2, attached at port 3 (/bus:1/1/3)
    High Speed USB
Bus 1 Device 2: ID 0424:9514
    Parent Hub 1:1, attached at port 1 (/bus:1/1)
    High Speed USB
Bus 1 Device 1: ID 1d6b:0002
    DWC OTG Controller (Linux 6.1.21-v7+ dwc_otg_hcd)
    High Speed USB
13:49:09.281 [INFO   ] io.calimero.usb.provider.javax: Found 1 KNX USB devices:
 |--Bus 001 Device 005: ID 135e:0022
 |   KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:49:09.363 [INFO   ] io.calimero.usb.provider.javax.135e:0022: Bus 001 Device 005: ID 135e:0022
KNX-USB Data Interface (Gira Giersiepen GmbH & Co. KG)
13:49:09.368 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: USB interface 00, setting 0
13:49:09.371 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 2 OUT
13:49:09.374 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN
13:49:09.377 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: Found USB device endpoint addresses OUT 0x2, IN 0x81
13:49:09.404 [DEBUG  ] io.calimero.serial.ConnectionFactory: serial port setup: Bus 001 Device 005: ID 135e:0022 USB interface 00
13:49:09.438 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000003
13:49:09.462 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130a000800020f0200000301
13:49:09.468 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000001
13:49:09.480 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130b000800030f020000010001
13:49:09.488 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130a000800020f0300000501
13:49:09.497 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000005
13:49:09.510 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130a000800020f0200000501
13:49:09.515 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 011309000800010f01000002
13:49:09.526 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130b000800030f020000020012
13:49:09.535 [DEBUG  ] io.calimero.link.135e:0022: KNX device descriptor 0 (Mask Version): 0012 - System 1 (BCU 1)
13:49:09.788 [TRACE  ] io.calimero.event: registered void io.calimero.link.KNXNetworkLinkUsb$1.connectionStatus(io.calimero.serial.ConnectionStatus)
13:49:09.806 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010109
13:49:09.819 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01010901
13:49:09.822 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01010901
13:49:09.830 [INFO   ] io.calimero.link.135e:0022: PEI type 1
13:49:09.835 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 1 ms
13:49:09.840 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010116
13:49:09.861 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01011600
13:49:09.864 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01011600
13:49:09.868 [DEBUG  ] io.calimero.link.135e:0022: Address Table location 00
13:49:09.871 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010060
13:49:09.884 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b0100601e
13:49:09.888 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b0100601e
13:49:09.895 [DEBUG  ] io.calimero.link.135e:0022: Current operation mode ApplicationLayer
13:49:09.898 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 2 ms
13:49:09.903 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130d00080005010100004601010901
13:49:09.912 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 17 ms
13:49:09.932 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010109
13:49:09.948 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01010901
13:49:09.949 [ERROR  ] io.calimero.link.135e:0022: verify write failed for address 109: 01 vs 1e
13:49:09.952 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01010901
13:49:09.957 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010101
13:49:09.967 [DEBUG  ] io.calimero.link.135e:0022: Base configuration flags 1
13:49:09.972 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 13 ms
13:49:09.978 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01010109
13:49:09.980 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01010109
13:49:09.989 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130d00080005010100004601010109
13:49:10.003 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010101
13:49:10.012 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 21 ms
13:49:10.017 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01010109
13:49:10.021 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01010109
13:49:10.038 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130d00080005010100004601006012
13:49:10.050 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010060
13:49:10.058 [ERROR  ] io.calimero.link.135e:0022: verify write failed for address 60: 12 vs 09
13:49:10.066 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 15 ms
13:49:10.062 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01006012
13:49:10.073 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01006012
13:49:10.088 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130d00080005010100004601011600
13:49:10.096 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c010116
13:49:10.105 [ERROR  ] io.calimero.link.135e:0022: verify write failed for address 116: 00 vs 12
13:49:10.110 [TRACE  ] io.calimero.link.135e:0022: enforce transmission interframe spacing, wait 17 ms
13:49:10.117 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130d00080005010100004b01011600
13:49:10.121 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b01011600
13:49:10.130 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: sending I/O request 01130c00080004010100004c020117
13:49:10.142 [TRACE  ] io.calimero.usb.provider.javax.135e:0022: EP 1 IN I/O request 01130e00080006010100004b02011711fe
13:49:10.144 [DEBUG  ] io.calimero.usb.provider.javax.135e:0022: received EMI1 frame 4b02011711fe
13:49:10.150 [ERROR  ] io.calimero.server.gateway.knx-server: error opening network link for usb-7.5.0
io.calimero.KNXIllegalArgumentException: address byte array too short
	at io.calimero.core/io.calimero.KNXAddress.<init>(KNXAddress.java:80)
	at io.calimero.core/io.calimero.IndividualAddress.<init>(IndividualAddress.java:93)
	at io.calimero.core/io.calimero.link.BcuSwitcher.enter(BcuSwitcher.java:167)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.linkLayerMode(KNXNetworkLinkUsb.java:230)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.<init>(KNXNetworkLinkUsb.java:156)
	at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.<init>(KNXNetworkLinkUsb.java:115)
	at [email protected]/io.calimero.server.gateway.SubnetConnector.lambda$openNetworkLink$9(SubnetConnector.java:334)
	at io.calimero.core/io.calimero.link.Connector$Link.connect(Connector.java:417)
	at io.calimero.core/io.calimero.link.Connector$Link.<init>(Connector.java:195)
	at io.calimero.core/io.calimero.link.Connector.newLink(Connector.java:151)
	at [email protected]/io.calimero.server.gateway.SubnetConnector.openNetworkLink(SubnetConnector.java:380)
	at [email protected]/io.calimero.server.gateway.KnxServerGateway.run(KnxServerGateway.java:730)
	at java.base/java.lang.Thread.run(Unknown Source)

13:49:10.205 [INFO   ] io.calimero.server.gateway.knx-server: knx-server: user request for shutdown
13:49:10.245 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server discovery endpoint
13:49:10.251 [DEBUG  ] io.calimero.server.knx-server: cleanup knx-server control endpoint usb-7.5.0
13:49:10.253 [INFO   ] io.calimero.server.knx-server: knx-server control endpoint usb-7.5.0 closed
13:49:10.256 [INFO   ] io.calimero.server.knx-server: knx-server discovery endpoint closed
13:49:10.263 [DEBUG  ] io.calimero.device.knx-server: saving device memory to file:///usr/app/knx-server-ios.xml
13:49:10.351 [DEBUG  ] io.calimero.device.knx-server: saving interface object server to file:///usr/app/knx-server-ios.xml
13:49:10.364 [TRACE  ] io.calimero.xml.XmlOutputFactory: no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamWriter
stop
request to stop server

No such method error: tuwien.auto.calimero.mgmt.PropertyClient$Property.readLevel()I

Hi!

I have manually downloaded the JARs (Version 2.4-rc1) from here:
https://mvnrepository.com/artifact/com.github.calimero

Then I have added the dependencies and the dir looks like this:

user@lxsrv:~/calimero$ ls -R
.:
calimero-core-2.4-rc1.jar    calimero-server-2.4-rc1.jar  commons-lang3-3.2.1.jar             resources  server-config.xml      usb4java-1.2.0.jar        usb-api-1.0.2.jar
calimero-device-2.4-rc1.jar  calimero-tools-2.4-rc1.jar   libusb4java-1.2.0-linux-x86_64.jar  run.sh     server-config.xml.new  usb4java-javax-1.2.0.jar

./resources:
javax.usb.properties  properties.xml
user@lxsrv:~/calimero$

So everthing should be in place.
However, when running it, I get:

user@lxsrv:~/calimero$ java -cp "./*:/usr/share/java/slf4j-simple.jar:/usr/share/java/slf4j-api.jar" tuwien.auto.calimero.server.Launcher server-config.xml
Exception in thread "main" java.lang.NoSuchMethodError: tuwien.auto.calimero.mgmt.PropertyClient$Property.readLevel()I
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer$IosAdapter.createNewDescription(InterfaceObjectServer.java:931)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer$IosAdapter.access$100(InterfaceObjectServer.java:679)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer.initIoProperties(InterfaceObjectServer.java:610)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer.addInterfaceObject(InterfaceObjectServer.java:294)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer.<init>(InterfaceObjectServer.java:162)
        at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer.initBasicServerProperties(KNXnetIPServer.java:720)
        at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer.<init>(KNXnetIPServer.java:316)
        at tuwien.auto.calimero.server.Launcher.<init>(Launcher.java:455)
        at tuwien.auto.calimero.server.Launcher.main(Launcher.java:435)
user@lxsrv:~/calimero$

Any idea, what's wrong?

ETS5 can not program

Hi,

I am using calimero made a KNX IP gatway, I can monitor knx bus message,but I can't program KNX device.

The log shows the device not response.

Hardware: Raspberry 4B,Siemens Bustranceiver Module BTM UP117 5WG1117-2AB12
Software: calimero-server

Best Regrads
songzh

Can't get calimero server to run on Alpine Docker

I installed calimero server on an Alpine Docker on Home Assistant OS via this Dockerfile: https://github.com/aschamberger/hassio-addons/blob/master/calimero-server/Dockerfile

The serial lib is compiled on Alpine to support musl and the Java runtime is reduced to java.base via jlink.

There is an exception thrown during startup:

[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] done.
[services.d] starting services
[services.d] done.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Calimero server settings (required for startup) -->
<knxServer name="knx-server" friendlyName="Calimero KNXnet/IP Server (on Home Assistant OS)">
	<!-- KNXnet/IP search & discovery -->
	<discovery listenNetIf="all" outgoingNetIf="all" activate="true" />
	<!-- Provides the KNXnet/IP-side configuration for access to one KNX subnet -->
	<serviceContainer activate="true" routing="false" networkMonitoring="true" 
		udpPort="3671" listenNetIf="any">
		<knxAddress type="individual">1.1.100</knxAddress>
		<knxSubnet type="ft12-cemi" medium="tp1">/dev/ttyAMA0</knxSubnet>
		<!-- KNX group address filter applied by the server for this service container (optional) -->
		<groupAddressFilter>
		</groupAddressFilter>
		<!-- Additional KNX individual addresses assigned to client KNXnet/IP connections (optional) -->
		<additionalAddresses>
			<knxAddress type="individual">1.1.101</knxAddress>
			<knxAddress type="individual">1.1.102</knxAddress>
			<knxAddress type="individual">1.1.103</knxAddress>
			<knxAddress type="individual">1.1.104</knxAddress>
			<knxAddress type="individual">1.1.105</knxAddress>
		</additionalAddresses>
	</serviceContainer>
	<!-- Add next service container (optional) -->
</knxServer>
[main] TRACE calimero.xml - resolve /etc/server-config.xml
[main] TRACE calimero.xml - no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
[main] TRACE calimero.xml - resolve jar:file:/opt/calimero/calimero-core-2.5-M1.jar!/properties.xml
[main] TRACE calimero.xml - no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamReader
[main] DEBUG calimero.device.knx-server - loading interface object server from file:///knx-server-ios.xml
[main] TRACE calimero.xml - resolve file:///knx-server-ios.xml
[main] INFO calimero.device.knx-server - could not open file:///knx-server-ios.xml, create resource on closing device (/knx-server-ios.xml (No such file or directory))
[main] INFO calimero.server.knx-server - Calimero KNXnet/IP Server (on Home Assistant OS) v2.5-M1
[main] INFO calimero.server.knx-server - knx-server 'Calimero KNXnet/IP Server (on Home Assistant OS)' - 1 service container, discovery: listen on [all] send on [all]
[main] INFO calimero.server.knx-server - /dev/ttyAMA0:
	listen on any (port 3671), KNX IP routing disabled
	ft12-cemi /dev/ttyAMA0 connection: TP1 medium, device 1.1.100
[main] DEBUG calimero.server.knx-server - setup ft12-cemi subnet '/dev/ttyAMA0'
type 'stop' to stop the gateway and shutdown the server
request to stop server
[knx-server discovery endpoint] TRACE calimero.server.knx-server - network stack uses IPv4 addresses: unknown
[main] INFO calimero.server.gateway.knx-server - knx-server: user request for shutdown
[knx-server discovery endpoint] TRACE calimero.server.knx-server - found network interfaces veth6c65d7f, vethe7827eb, vethfcf3684, veth0003e0c, vethf61de3e, veth5fed532, hassio [172.30.32.1], docker0 [172.17.0.1], eth0 [192.168.178.72], lo [127.0.0.1]
[knx-server] TRACE calimero.serial - check Java library path /opt/jdk/lib/server:/opt/jdk/lib:/opt/jdk/../lib:/usr/java/packages/lib:/lib:/usr/lib
[knx-server discovery endpoint] INFO calimero.server.knx-server - knx-server discovery endpoint [hassio, docker0, eth0, lo] is up and running
[knx-server] INFO calimero.serial - no serialcom in java.library.path: [/opt/jdk/lib/server, /opt/jdk/lib, /opt/jdk/../lib, /usr/java/packages/lib, /lib, /usr/lib]
[main] INFO calimero.server.knx-server - knx-server discovery endpoint closed
[main] INFO calimero.server.knx-server - knx-server control endpoint /dev/ttyAMA0 closed
[main] DEBUG calimero.device.knx-server - saving interface object server to file:///knx-server-ios.xml
[knx-server] DEBUG calimero.serial.ft12:/dev/ttyAMA0 - using rxtx library for serial port access
[main] TRACE calimero.xml - no StaX implementation found (java.lang.NoClassDefFoundError: javax/xml/stream/XMLStreamException), using internal XMLStreamWriter
[knx-server control endpoint /dev/ttyAMA0] TRACE calimero.server.knx-server - /dev/ttyAMA0 control endpoint bound to 172.30.32.1:3671
[knx-server] INFO calimero.serial.ft12:/dev/ttyAMA0 - open rxtx (RXTX-2.2pre2) serial port connection for /dev/ttyAMA0
[knx-server control endpoint /dev/ttyAMA0] INFO calimero.server.knx-server - /dev/ttyAMA0 secure mgmt/tunneling connections: optional/optional
[knx-server] DEBUG calimero.serial.ft12:/dev/ttyAMA0 - setup serial port: baudrate 19200, even parity, 8 databits, 1 stopbits, flow control 0
[knx-server control endpoint /dev/ttyAMA0] WARN calimero.server.knx-server - initialization of knx-server control endpoint /dev/ttyAMA0 failed, retry in 10 seconds
tuwien.auto.calimero.KnxRuntimeException
	at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(Unknown Source)
	at java.base/java.util.concurrent.locks.ReentrantLock.lockInterruptibly(Unknown Source)
	at java.base/java.util.concurrent.ArrayBlockingQueue.poll(Unknown Source)
	at tuwien.auto.calimero.server.knxnetip.TcpLooper.start(TcpLooper.java:87)
	at tuwien.auto.calimero.server.knxnetip.ControlEndpointService.<init>(ControlEndpointService.java:165)
	at tuwien.auto.calimero.server.knxnetip.KNXnetIPServer.lambda$addServiceContainer$0(KNXnetIPServer.java:409)
	at tuwien.auto.calimero.server.knxnetip.LooperTask.run(LooperTask.java:102)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
	at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.InterruptedException
	... 13 more
[knx-server] TRACE calimero.serial.ft12:/dev/ttyAMA0 - send reset to BCU
[knx-server /dev/ttyAMA0 tcp service] INFO calimero.server.knx-server - knx-server /dev/ttyAMA0 tcp service (hassio 172.30.32.1:3671) is up and running
[knx-server] TRACE calimero.serial.ft12:/dev/ttyAMA0 - sending FT1.2 frame, blocking, attempt 1
[knx-server] DEBUG calimero.link./dev/ttyAMA0 - hop count set to 6
[knx-server] DEBUG calimero.server.gateway.knx-server - set maximum APDU length of '/dev/ttyAMA0' to 15
[main] DEBUG calimero.device.knx-server - saving device memory to /knx-server-ios.mem

Wrong property type size when enabling timeServer in config

Hi,
I got calimero server running without problems, but when I enable the timeServer in the config file

                <timeServer>
                        <datapoint stateBased="true" name="current date" dptID="10.001" priority="low">
                                <knxAddress type="group">1/1/36</knxAddress>
                                <expiration timeout="60" />
                        </datapoint>
                </timeServer>

I got this exception:

[main] ERROR calimero.server.knx-server - initialization of KNX server failed
tuwien.auto.calimero.device.ios.KnxPropertyException: property type size is 2, not 4, type conflict (write access with a wrong data type (datapoint length))
        at tuwien.auto.calimero.device.ios.InterfaceObject.setProperty(InterfaceObject.java:351)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer$IosAdapter.setProperty(InterfaceObjectServer.java:656)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer$IosAdapter.setProperty(InterfaceObjectServer.java:615)
        at tuwien.auto.calimero.device.ios.InterfaceObjectServer.setProperty(InterfaceObjectServer.java:422)
        at tuwien.auto.calimero.device.BaseKnxDevice.addGroupObject(BaseKnxDevice.java:487)
        at tuwien.auto.calimero.server.gateway.KnxServerGateway.setupTimeServer(KnxServerGateway.java:884)
        at tuwien.auto.calimero.server.gateway.KnxServerGateway.<init>(KnxServerGateway.java:704)
        at tuwien.auto.calimero.server.Launcher.run(Launcher.java:639)
        at tuwien.auto.calimero.server.Launcher.main(Launcher.java:613)

Same with dptID="11.001" or dptID="19.001"

USB is not connected to KNX network

Hello,

when I start the server I am get some errors. Is this a configuration Problem?

Regards Jürgen

Log entries (Calimero on Docker Container):

13:29:33.703 [INFO ] io.calimero.server.knx-server: knx-server siemens control endpoint (eth0 10.1.1.34:3671) is up and running
13:29:33.906 [INFO ] io.calimero.usb.provider.javax: Found 1 KNX USB devices:
|--Bus 004 Device 003: ID 0908:02dd
| N 148/12 KNX Interface (Siemens)
| S/N 0001005521D7
13:29:34.061 [INFO ] io.calimero.usb.provider.javax.siemens: Bus 004 Device 003: ID 0908:02dd
N 148/12 KNX Interface (Siemens)
S/N 0001004421D7
13:29:35.123 [ERROR ] io.calimero.link.connector: initial connection attempt
io.calimero.link.KNXLinkClosedException: USB interface is not connected to KNX network
at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.(KNXNetworkLinkUsb.java:133)
at io.calimero.core/io.calimero.link.KNXNetworkLinkUsb.(KNXNetworkLinkUsb.java:116)
at [email protected]/io.calimero.server.gateway.SubnetConnector.lambda$openNetworkLink$9(SubnetConnector.java:334)
at io.calimero.core/io.calimero.link.Connector$Link.connect(Connector.java:417)
at io.calimero.core/io.calimero.link.Connector$Link.(Connector.java:195)
at io.calimero.core/io.calimero.link.Connector.newLink(Connector.java:151)
at [email protected]/io.calimero.server.gateway.SubnetConnector.openNetworkLink(SubnetConnector.java:380)
at [email protected]/io.calimero.server.gateway.KnxServerGateway.run(KnxServerGateway.java:730)
at java.base/java.lang.Thread.run(Unknown Source)
13:29:35.136 [WARNING] io.calimero.server.gateway.knx-server: cannot dispatch to KNX subnet 1.1.0: no subnet connection

Docker images for Raspbian

Hello,

I've seen that the published docker images on Docker Hub are only for amd64. It would be great to have docker images for arm/v7.

Would you consider to publish an official calimero-server image for that platform?

Regards,

Manuel Martínez

Maximum amount of concurrent connections is already used

Hello friends,

I have an office with knx infrastructure and an automation software runs on it. I have 2 knx ip router devices and one of them is broken. I want to use this project as a replacement to that broken knx ip router. ETS can recognize calimero server but when I test it it says "The interface can not accept the new data connection because its maximum amound of concurrent connections is already used"

image

Here is the console output:

Starting a Gradle Daemon (subsequent builds will be faster)
Path for java installation '/usr/lib/jvm/openjdk-17' (Common Linux Locations) does not contain a java executable

> Task :run
08:14:16:188 INFO io.calimero.server.knx-server - Calimero KNX IP server v3.0-SNAPSHOT
08:14:16:212 INFO io.calimero.server.knx-server - use configuration 'Calimero KNX IP Server' with 1 service container, discovery: listen on [ens160] send on [ens160] interfaces
service container 192.168.1.165:3671:
        server: listen on ens160 (port 3671), KNX IP routing disabled
        Udp 192.168.1.165:3671 connection: TP1 medium, device 15.15.0
type 'stop' to stop the gateway and shutdown the server
08:14:16:256 INFO io.calimero.server.knx-server - discovery endpoint [ens160] is up and running
08:14:16:268 INFO io.calimero.server.knx-server - 192.168.1.165:3671 secure mgmt/tunneling connections: optional/optional
08:14:16:271 INFO io.calimero.server.knx-server - 192.168.1.165:3671 tcp service (ens160 192.168.1.165:3671) is up and running
08:14:16:272 INFO io.calimero.server.knx-server - 192.168.1.165:3671 control endpoint (ens160 192.168.1.165:3671) is up and running
08:14:16:272 INFO io.calimero.server.knx-server - 192.168.1.165:3671: setup data endpoint (UDP, channel 1) for connection request from 192.168.1.165:36767
08:14:16:275 INFO io.calimero.server.knx-server - assign additional individual address 15.15.10 to channel 1
08:14:26:267 ERROR io.calimero.knxnetip.KNXnet/IP Tunneling 192.168.1.165:3671 - establishing connection failed, timeout connecting to control endpoint 192.168.1.165:3671
08:14:26:267 ERROR io.calimero.link.connector - initial connection attempt
io.calimero.KNXTimeoutException: timeout connecting to control endpoint 192.168.1.165:3671
        at io.calimero.core/io.calimero.knxnetip.ClientConnection.connect(ClientConnection.java:226)
        at io.calimero.core/io.calimero.knxnetip.KNXnetIPTunnel.<init>(KNXnetIPTunnel.java:174)
        at io.calimero.core/io.calimero.knxnetip.KNXnetIPTunnel.<init>(KNXnetIPTunnel.java:166)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.newConnection(KNXNetworkLinkIP.java:586)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.<init>(KNXNetworkLinkIP.java:347)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.newTunnelingLink(KNXNetworkLinkIP.java:163)
        at [email protected]/io.calimero.server.gateway.SubnetConnector.lambda$openNetworkLink$2(SubnetConnector.java:296)
        at io.calimero.core/io.calimero.link.Connector$Link.connect(Connector.java:424)
        at io.calimero.core/io.calimero.link.Connector$Link.<init>(Connector.java:195)
        at io.calimero.core/io.calimero.link.Connector.newLink(Connector.java:151)
        at [email protected]/io.calimero.server.gateway.SubnetConnector.openNetworkLink(SubnetConnector.java:381)
        at [email protected]/io.calimero.server.gateway.KnxServerGateway.run(KnxServerGateway.java:729)
        at java.base/java.lang.Thread.run(Thread.java:840)
08:14:26:281 ERROR io.calimero.knxnetip.KNXnet/IP Tunneling 192.168.1.165:3671 - establishing connection failed, timeout connecting to control endpoint 192.168.1.165:3671
08:14:26:281 ERROR io.calimero.link.connector - initial connection attempt
io.calimero.KNXTimeoutException: timeout connecting to control endpoint 192.168.1.165:3671
        at io.calimero.core/io.calimero.knxnetip.ClientConnection.connect(ClientConnection.java:226)
        at io.calimero.core/io.calimero.knxnetip.KNXnetIPTunnel.<init>(KNXnetIPTunnel.java:174)
        at io.calimero.core/io.calimero.knxnetip.KNXnetIPTunnel.<init>(KNXnetIPTunnel.java:166)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.newConnection(KNXNetworkLinkIP.java:586)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.<init>(KNXNetworkLinkIP.java:347)
        at io.calimero.core/io.calimero.link.KNXNetworkLinkIP.newTunnelingLink(KNXNetworkLinkIP.java:163)
        at [email protected]/io.calimero.server.gateway.SubnetConnector.lambda$openNetworkLink$2(SubnetConnector.java:296)
        at io.calimero.core/io.calimero.link.Connector$Link.connect(Connector.java:424)
        at io.calimero.core/io.calimero.link.Connector$Link.<init>(Connector.java:195)
        at io.calimero.core/io.calimero.link.Connector.newLink(Connector.java:151)
        at [email protected]/io.calimero.server.gateway.SubnetConnector.openNetworkLink(SubnetConnector.java:381)
        at [email protected]/io.calimero.server.gateway.KnxServerGateway$KNXnetIPServerListener.acceptDataConnection(KnxServerGateway.java:264)
        at [email protected]/io.calimero.server.knxnetip.ControlEndpointService.lambda$acceptConnection$14(ControlEndpointService.java:1176)
        at java.base/java.util.stream.MatchOps$1MatchSink.accept(MatchOps.java:90)
        at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
        at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
        at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
        at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:230)
        at java.base/java.util.stream.MatchOps$MatchOp.evaluateSequential(MatchOps.java:196)
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base/java.util.stream.ReferencePipeline.allMatch(ReferencePipeline.java:637)
        at [email protected]/io.calimero.server.knxnetip.ControlEndpointService.acceptConnection(ControlEndpointService.java:1176)
        at [email protected]/io.calimero.server.knxnetip.ControlEndpointService.initNewConnection(ControlEndpointService.java:946)
        at [email protected]/io.calimero.server.knxnetip.ControlEndpointService.acceptControlService(ControlEndpointService.java:407)
        at [email protected]/io.calimero.server.knxnetip.ControlEndpointService.handleServiceType(ControlEndpointService.java:327)
        at [email protected]/io.calimero.server.knxnetip.ServiceLooper.onReceive(ServiceLooper.java:108)
        at io.calimero.core/io.calimero.internal.UdpSocketLooper.receive(UdpSocketLooper.java:166)
        at io.calimero.core/io.calimero.internal.UdpSocketLooper.loop(UdpSocketLooper.java:123)
        at [email protected]/io.calimero.server.knxnetip.ServiceLooper.run(ServiceLooper.java:87)
        at [email protected]/io.calimero.server.knxnetip.LooperTask.run(LooperTask.java:97)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)

and here is my configuration.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- Calimero server settings (required for startup) -->
<knxServer name="knx-server" friendlyName="Calimero KNX IP Server">
        <!-- KNXnet/IP search & discovery -->
        <discovery listenNetIf="ens160" outgoingNetIf="ens160" activate="true" />
        <!-- Provides the KNXnet/IP-side configuration for access to one KNX subnet -->
        <serviceContainer activate="true" routing="false" networkMonitoring="true"
                udpPort="3671" listenNetIf="ens160">
                <knxAddress type="individual">15.15.0</knxAddress>
                <routing/>

                <knxSubnet type="udp" media="knxip">192.168.1.165:3671</knxSubnet>

                <groupAddressFilter>
                        <!-- <knxAddress type="group">2/1/1</knxAddress> -->
                        <!-- <knxAddress type="group">2/1/0</knxAddress> -->
                        <!-- <knxAddress type="group">2/1/20</knxAddress> -->
                </groupAddressFilter>

                <!-- Additional KNX individual addresses assigned to client KNXnet/IP connections (optional) -->
                <additionalAddresses>
                        <knxAddress type="individual">15.15.10</knxAddress>
                        <knxAddress type="individual">15.15.11</knxAddress>
                </additionalAddresses>

        </serviceContainer>

        <!-- Add next service container (optional) -->
</knxServer>

Could you please help me?

Connection not possible if a client and Calimero Server on same Docker host

I tried running Calimero as planned on my production home assistant server. However its not working.
I already opened a issue at XKNX/xknx#815 for the Home Assistant part.
However it seems the problem lies on the Calimero side if the client application is running on the same Docker host. When I run Calimero in the same setup on another device at least Routing works. Tunneling also fails.
You can find all the logs at XKNX/xknx#815

USB-RF Server - No programming possible

Hi
I'm currently trying to get started with the calimero-server.
What I try to achieve is the following setup:
calimero-server with attached USB KNX RF Stick to control some KNX RF actors

The installation and initial setup of calimero-server worked fine - as far as I can judge it until now.
When trying to add my devices using ETS I face the following error:
"Die Busverbindung KnxIpTunneling : calimero - 192.168.1.106:3671 der Linie 7.1 Linie konnte nicht hergestellt werden.
Object reference not set to an instance of an object."

Can someone please support me in getting it up and running?
Thanks in advance!
server-config.xml.zip
ets_project.zip
2020-12-16_18-28-10
2020-12-16_18-33-48
2020-12-16_18-34-04
2020-12-16_18-34-33

What is the latest version of calimero-server?

Hello,

I am running the calimeroproject/knxserver:latest-armv7 tag from Dockerhub. The logs tell me that this is "Calimero KNX IP Server v2.6-SNAPSHOT". However this Github project suggests the latest release is actually 2.5.1, which seems contradictory. What is the latest release? Is the Dockerhub image up to date?

I am also facing some issues getting the server up and connecting to it from ETS, but I want to make sure I am running the latest version before I open any issues about those problems. Thanks.

Best regards,
Lukas

Docker Image for orange pi 5

Hello,

I'm don't find a docker image for aarch64 (orange pi 5). It would be great to have docker images for aarch64.

Would you consider to publish an official calimero-server image for that platform?

Regards,

Jürgen

[Question] Config for forwarding home KNX network to development net

Hey,

so I've a calimero-server up an running for a development KNX system in order to keep my home system "clean".

Now, I'm wondering, if you have any idea for a configuration so the signals from my home KNX net are routed to my development net, but not vice versa - so the development communication should stay in that net.

Thnaks in advanced and kind regard
Dr.A.Colian

USB interface with "ERROR calimero.link.connector"

Hello,
i am trying to try openhab on Raspberry 3B to manage a knx system.
I discovered the calimero project via the blog www.michlstechblog.info of which I followed the instructions to install calimero and the installation seems to have been successful, but it doesn't seem to connect to the USB interface.

ZENNIO KNX USB INTERFACE ZN1SY-USBP
Raspberry 3B

I updated the file "/etc/udev/rules.d/90-knxusb-devices.rules" with the ID of my interface (28c2 - 0002) but using the command "journalctl -xu knx" I noticed what I think is an error (I apologize if the term is incorrect, but I'm a beginner).

I attach what appears on the terminal after the command, hoping that someone can help me, because I have already given up using KNXD as I was unable to use/configure it.

thankyou

journalctl log.txt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.